获得两个给定日期之间的SUM

时间:2013-09-16 22:15:52

标签: mysql

如果我想在一系列日期中获得total_consumption,我该怎么做?

我以为我能做到:

SELECT id, SUM(consumption) 
FROM consumption_info 
WHERE date_time BETWEEN 2013-09-15 AND 2013-09-16 
GROUP BY id;

然而这会返回:空集,2警告(0.00秒)

---------------------------------------
id | consumption |  date_time          |        
=======================================|
1  |      5      | 2013-09-15 21:35:03 |
2  |      5      | 2013-09-15 24:35:03 |
3  |      7      | 2013-09-16 11:25:23 |
4  |      3      | 2013-09-16 20:15:23 |
----------------------------------------

我在这里做错了什么想法?

提前致谢

3 个答案:

答案 0 :(得分:3)

您在日期字符串周围缺少引号:WHERE子句实际上应该写为......

BETWEEN '2013-09-15' AND '2013-09-16'

具有讽刺意味的是,2013-09-15 是一个有效的SQL表达式 - 它意味着2013 minus 09 minus 15。显然,相应的结果之间没有日期;因此返回一个空集

然而,这里可能还有另一个更微妙的错误:你可能应该使用这个条款......

BETWEEN '2013-09-15 00:00:00' AND '2013-09-16 23:59:59'

......相反。如果没有明确设置时间,它将在两个日期都设置为'00:00:00'(因为DATETIME值在这里进行比较)。

虽然对于开始日期显然没有问题,但对于结束日期来说并非如此 - 当然,除非在当天的任何时间排除所有记录,但午夜实际上是期望的结果。

答案 1 :(得分:1)

SELECT SUM(consumption) 
FROM consumption_info 
WHERE date_time >= 2013-09-15 AND date_time <= 2013-09-16;

SELECT SUM(consumption) 
FROM consumption_info 
WHERE date_time BETWEEN 2013-09-15 AND 2013-09-16;

答案 2 :(得分:0)

比较日期函数时,最好使用CAST。

SELECT id, SUM(consumption) 
FROM consumption_info 
WHERE date_time 
    BETWEEN CAST('2013-09-15' AS DATETIME) 
    AND CAST('2013-09-16' AS DATETIME) 
GROUP BY id;