過去5/10/15日間に、日付ごとにグループ化された、毎日作成されているユーザーの数を知りたいと思いました。
過去5日間の日付ごとの申し込みに使用したクエリは次のとおりです。
SELECT CAST(created AS DATE) as DateField , count(email) as Num
FROM invited_users where created > curdate()-5
GROUP BY CAST(created AS DATE);
// "created" is a datetime field
// returns 5 rows
これは私が期待したとおりに機能します。
しかし、数字の「5」を「10」または15(または5以外)に変更すると、機能しません。代わりに、データベース内のすべての日付を返します。
SELECT CAST(created AS DATE) as DateField , count(email) as Num
FROM invited_users where created > curdate()-15
GROUP BY CAST(created AS DATE);
// returns 97 rows
なぜ?!ここで何が起こっているのですか?
ところで、同じことが他のテーブルでも起こります。
編集:
select curdate(), curdate() -5, curdate() - 15, curdate() + 1, curdate() + 0;
次の結果が得られます:2013年3月5日12:00:00 AM 20130300 20130290 20130306 20130305
これがどのように計算されているのかわかりませんでした。CURDATE()+ 1は明日の日付を示しますが、CURDATE()-5はデコードできない値を示します。