我有以下MySQL查询:
select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime >= '2016-03-10' and JoinTime <= '2016-03-15' group by day(JoinTime);
我得到的结果是:
| date(JoinTime) | count(distinct UniqueCallID) |
+----------------+------------------------------+
| 2016-03-10 | 20 |
| 2016-03-11 | 29 |
| 2016-03-12 | 2 |
| 2016-03-13 | 5 |
| 2016-03-14 | 12 |
正如您所看到的那样,它没有返回2016-03-15的数据,即使我明确设置了>=
运算符,因为我想包含2016-03-15。
我也尝试过这样的BETWEEN:
select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime between '2016-03-10' and '2016-03-15' group by day(JoinTime);
结果是一样的。
为什么会这样?我该怎么做才能解决它?
答案 0 :(得分:4)
由于您只是与日期进行比较,因此您需要将JoinTime
转换为第一个日期
select date(JoinTime), count(UniqueCallID)
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15'
group by day(JoinTime);
此外,由于可能有几个月相关,您应按年,月和日分组:
select date(JoinTime), count(UniqueCallID)
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15'
group by year(JoinTime), month(JoinTime), day(JoinTime);
您使用它的方式,像
这样的条目2016-03-15 12:21:32
将检查
2016-03-15 00:00:00
所以不会包含它,因为它与<=
条件不匹配。
答案 1 :(得分:3)
如果JoinTime属于DateTime类型,并且您没有提供“时间”。部分,MySql假设您的时间是午夜(&#39; 2016-03-10 00:00:00&#39;)。所以你要查看2016-03-10 00:00:00&#39;到2016-03-15 00:00:00&#39;这给你的结果。
一天之后再尝试,或者将mmm提供给日期。