ホームページ > データベース > mysql チュートリアル > MySQL でレコードがゼロの日付も含め、範囲内のすべての日付を取得するにはどうすればよいですか?

MySQL でレコードがゼロの日付も含め、範囲内のすべての日付を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-03 13:33:39
オリジナル
913 人が閲覧しました

How to Retrieve All Dates within a Range, Including Those with Zero Records in MySQL?

MySQL: 空の日付を含む範囲内のすべての日付を取得する

データベース管理では、ユーザーベースの増加を視覚化するためにグラフィック表現が必要になることがよくあります。このようなグラフを作成するには、特定の日付範囲内の毎日のユーザー数を収集するクエリを使用できます。ただし、ユーザーのアクティビティがない日がある場合、それらの日付は結果から除外されます。この問題に対処するために、レコードがゼロの日付を含む包括的な日付範囲を取得する方法を検討してみましょう。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート