ホームページ >データベース >mysql チュートリアル >カレンダー テーブルを使用して MySQL テーブルから日付が欠落しているデータを抽出するにはどうすればよいですか?
概要:
当面のタスクには、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 サイトの他の関連記事を参照してください。