ホームページ > データベース > mysql チュートリアル > 完全な日付範囲の MySQL クエリに欠落している日付を入力するにはどうすればよいですか?

完全な日付範囲の MySQL クエリに欠落している日付を入力するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-16 18:52:22
オリジナル
519 人が閲覧しました

How Can I Populate Missing Dates in MySQL Queries for Complete Date Ranges?

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

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