MySQL で 2 つの日付間のデータを取得するときに欠落している日付を設定する
MySQL では、BETWEEN 演算子を使用して 2 つの日付間のデータを選択する場合、指定された範囲内の一部の日付には、対応するデータがない可能性があります。これにより、クエリ結果に空の行または欠落行が生じる可能性があります。
問題ステートメント:
次に示すように、日付に関連付けられたデータを含む "tbl" という名前のテーブルについて考えます。 :
Date | Data |
---|---|
2009-06-25 | 75 |
2009-07-01 | 100 |
2009-07-02 | 120 |
「2009-06-25」から「2009-06-25」までのすべてのデータを取得したい場合次のクエリを使用した '2009-07-01':
SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
クエリは、指定された範囲内の既存のデータを含む行のみを返します。これは、「2009-06-26」、「2009-06-27」、「2009-06-28」などのデータのない日付は結果から除外されることを意味します。
解決策: 欠落している日付を入力するためのカレンダー テーブル
この問題に対処し、すべての日付を含めるには指定された範囲内では、データの有無に関係なく、「カレンダー テーブル」として知られる概念を利用できます。これらのテーブルは、指定された間隔内で一連の日付を生成するのに役立ち、基本的にすべての可能な日付の「疑似」テーブルとして機能します。
MySQL でカレンダー テーブルを作成する方法の例を次に示します。
-- Create a table with integers from 0 to 9 CREATE TABLE ints (i INTEGER); INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); -- Generate a sequence of dates from '2009-06-25' to '2009-07-01' SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date FROM ints a JOIN ints b WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
カレンダー テーブルを作成したら、データ テーブルとの左結合を実行して、欠落している日付を入力できます。更新されたクエリは次のとおりです。
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 WHERE date BETWEEN '2009-06-25' AND '2009-07-01' ) cal LEFT JOIN tbl ON cal.date = tbl.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
このクエリは、「tbl」テーブルにデータがない日付も含め、指定された範囲内のすべての日付を取得します。データが欠落している日付の「データ」列には NULL 値が入ります。
以上がMySQL クエリで 2 つの日付の間に欠落している日付を入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。