4

ある範囲の日付の 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 |
----------------------------------------

私がここで間違っていることは何ですか?

前もって感謝します

4

3 に答える 3

5

日付文字列を囲む引用符がありません: 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ここで値が比較されるため)。

開始日については明らかに問題ありませんが、終了日についてはそうではありません。もちろん、その日の真夜中以外の時間のすべてのレコードを除外することが実際に望ましい結果である場合を除きます。

于 2013-09-16T22:17:06.607 に答える