【问题标题】:Why my query didn't give the right Count and Max?为什么我的查询没有给出正确的计数和最大值?
【发布时间】:2019-08-22 19:46:47
【问题描述】:

发送日期、打开总数、上次打开日期(如果有打开)、总点击次数、上次点击日期(如果有打开)

create table TBLA(Email text, SendID text, SendDate date, OpenDate date, ClickDate date);

insert into TBLA values("aaa@gmail.com", "ABCD1234", "8/1/2019",'1/8/2019',"8/1/2019");
insert into TBLA values("aaa@gmail.com", "ABCD1234", "8/1/2019",'2/8/2019',"");
insert into TBLA values("aaa@gmail.com", "ABCD1234", "8/1/2019",'3/8/2019',"8/3/2019");
insert into TBLA values("bbb@gmail.com", "ABCD1234", "8/1/2019",'1/8/2019',"");
insert into TBLA values("bbb@gmail.com", "ABCD1234", "8/1/2019",'2019/8/15',"8/15/2019");
insert into TBLA values("ccc@gmail.com", "ABCD1234", "8/1/2019","","");
insert into TBLA values("ddd@gmail.com", "ABCD1234", "8/1/2019","","");
insert into TBLA values("aaa@gmail.com", "xyz123", "8/2/2019","8/2/2019","8/2/2019");
insert into TBLA values("aaa@gmail.com", "xyz123", "8/2/2019","8/15/2019","");
insert into TBLA values("bbb@gmail.com", "xyz123", "8/2/2019","","");
insert into TBLA values("ccc@gmail.com", "xyz123", "8/2/2019","8/5/2019","8/5/2019");


select SendID," ", SendDate," ",count(OpenDate), " ", max(OpenDate), " ", count(ClickDate), " ", max(ClickDate)
from TBLA 
where SendID = "ABCD1234" AND (OpenDate<>"" AND ClickDate<>"");

count(OpenDate) 必须为 5,max(OpenDate) 必须为 8/15/2019。 Count(ClickDate) 必须为 3。

【问题讨论】:

  • 您在SELECT 中有一个包含未聚合列的聚合查询。没有GROUP BY。该查询在语法上看起来无效。
  • 我添加了 GROUP BY 并且没有任何变化。我减少了我的查询: Select count(OpenDate), max(OpenDate) from TBLA where SendID="ABCD1234" AND OpenDate "" group by SendID;结果对 Count 有利,但最大日期为“2019 年 8 月 3 日”。为什么不是“8/15/2019”?
  • @JulieLevesque 您的日期是字符串格式,这就是“2019 年 8 月 3 日”大于“2019 年 8 月 15 日”的原因。您需要使用转换函数将字符串格式的日期转换为日期时间格式的日期。
  • 我很惊讶你的代码甚至可以运行。查询有很多问题。

标签: sql date count max


【解决方案1】:

正如@nagarwal 指出的那样,存在数据类型问题。日期字段被声明为日期,但接收字符串作为输入。 由于您是手动输入数据,我认为只需使用“YYYY-MM-DD”语法作为日期即可。

【讨论】:

  • 我更改了文本中的日期字段。我更改了“YYYY-MM-DD”的插入格式。但是在 TBLA 中的 Select Max(Date(OpenDate)) 中,不起作用。我在 SqlLite 中,To_date 不起作用
【解决方案2】:

您可以使用 to_date 函数将日期列插入到您的表中,这将解决问题

【讨论】:

  • 我发现:从 TBLA 中选择 Max(strftime('%m/%d/%Y',OpenDate));答案是“2019 年 8 月 15 日”。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多