ホームページ >データベース >mysql チュートリアル >カレンダー テーブルを使用して MySQL テーブルから日付が欠落しているデータを抽出するにはどうすればよいですか?

カレンダー テーブルを使用して MySQL テーブルから日付が欠落しているデータを抽出するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 00:52:11355ブラウズ

How Can I Extract Data with Missing Dates from a MySQL Table Using a Calendar Table?

カレンダー テーブルを使用した日付が欠落しているデータの抽出

概要:

当面のタスクには、MySQL からのデータの取得が含まれます日付に関連付けられた値を含むテーブル。目標は、特定の日付にデータが存在しないインスタンスを含む、指定された日付範囲内にあるすべてのデータを選択することです。

クエリ:

提供されたクエリ、SELECT data FROM tbl WHERE date BETWEEN date1 AND date2 は、定義された範囲内のデータを効果的に選択します。ただし、その間隔内の空の日付は考慮されません。

解決策:

この問題に対処するには、「カレンダー テーブル」の概念を使用できます。これらのテーブルは、日付を表す構造化された方法を提供し、欠落した日付の操作や組み込みを容易にします。

カレンダー テーブルの実装:

次の MySQL コードを使用して、カレンダー テーブルの作成:

CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

指定された日付にわたるカレンダー テーブルを生成するにはrange:

SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
FROM ints a JOIN ints b
ORDER BY a.i * 10 + b.i

このクエリは、'2009-06-25' と '2009-07-01' の範囲内の日付のリストを生成します。

カレンダーとデータ テーブル:

カレンダー テーブル ('cal') を元のテーブルと左結合する('tbl') 'date' フィールドで、目的の結果を取得できます。

SELECT cal.date, tbl.data
FROM (
    SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
    FROM ints a JOIN ints b
    ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';

このクエリは、空のデータ値 (表示される日付) を含む、指定された範囲内のすべての日付を返します。 NULL として)。

以上がカレンダー テーブルを使用して MySQL テーブルから日付が欠落しているデータを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。