データベース管理では、ユーザーベースの増加を視覚化するためにグラフィック表現が必要になることがよくあります。このようなグラフを作成するには、特定の日付範囲内の毎日のユーザー数を収集するクエリを使用できます。ただし、ユーザーのアクティビティがない日がある場合、それらの日付は結果から除外されます。この問題に対処するために、レコードがゼロの日付を含む包括的な日付範囲を取得する方法を検討してみましょう。
MySQL では、次のクエリは、指定された日付範囲内で日ごとにグループ化されたユーザー数を取得します。
SELECT DATE(datecreated), count(*) AS number FROM users WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW()) GROUP BY DATE(datecreated) ORDER BY datecreated ASC
このクエリは必要な情報のほとんどを提供しますが、ユーザーがゼロの日付は除外されます。空の日付を含めるには、次のアプローチを利用できます。
SELECT * FROM ( SELECT date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*10000+n4.num*1000+n3.num*100+n2.num*10+n1.num DAY ) as date FROM (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n1, (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n2, (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n3, (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n4, (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n5 ) a WHERE date > '2011-01-02 00:00:00.000' AND date < NOW() ORDER BY date
このクエリを使用すると、指定された範囲内の日付のシーケンスを生成し、それらの日付に対応する日付がない場合でも、結果に含めることができます。データベース内のレコード。
以上がMySQL でレコードがゼロの日付も含め、範囲内のすべての日付を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。