MySQL の日付範囲のデータ ギャップの入力
2 つの特定の日付間のデータを取得する必要があるシナリオに遭遇する可能性があります。その範囲内の特定の日付にはエントリがありません。この課題に対処するための一般的なアプローチは、「カレンダー テーブル」を作成することです。
次のテーブル構造を考えてみましょう:
CREATE TABLE data ( date DATE, value INT ); INSERT INTO data VALUES ('2009-06-25', 75), ('2009-07-01', 100), ('2009-07-02', 120);
'2009-06-25' から '2009-06-25' までのすべてのデータを取得するには'2009-07-01' の場合、次のクエリを使用できます:
SELECT date, value FROM data WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
ただし、これはクエリは、指定された範囲内でデータが関連付けられていない日付をすべて除外します。これに対処するために、カレンダー テーブルが使用されます。
指定された日付範囲のカレンダー テーブルを作成するには、次の手順を実行できます。
CREATE TABLE cal ( date DATE ); INSERT INTO cal (date) SELECT DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) FROM ints i CROSS JOIN ints j WHERE DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) BETWEEN '2009-06-25' AND '2009-07-01';
計算テーブルにはすべての日付が含まれます。 「2009-06-25」と「2009-07-01」の間ですが、関連するデータはありません。必要なデータをギャップとともに取得するには、左結合を使用できます。
SELECT cal.date, data.value FROM cal LEFT JOIN data ON cal.date = data.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
このクエリは、データのない日付も含め、指定された範囲内のすべての日付を返します。これらの日付は、NULL 値で表されます。値列。
以上が完全な日付範囲の MySQL クエリに欠落している日付を入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。