ホームページ >データベース >mysql チュートリアル >Numbers テーブルを使用して MySQL データセットの欠落している日付を埋める方法

Numbers テーブルを使用して MySQL データセットの欠落している日付を埋める方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 16:52:09513ブラウズ

How to Fill Missing Dates in a MySQL Dataset Using a Numbers Table?

MySQL: 日付範囲

の欠落している日付を埋める

データ管理の分野では、欠落した日付が含まれるデータセットに遭遇することがよくあります。この問題を解決するために、MySQL はこれらの欠落した日付を埋めて、連続した日付シーケンスを保証するソリューションを提供します。

MySQL で欠落している日付を埋める鍵は、数値テーブルのトリックを利用することです。この方法では、自動インクリメントする整数列 (実質的には数値のインクリメント リスト) を含む「numbers」というテーブルを作成します。

次に、「numbers」テーブルに十分な行を入力します。これにより、目的の日付範囲をカバーするのに十分な範囲の増加する数値が確保されます。

日付のリストを作成するには、DATE_ADD 関数を使用します。具体的には、次のクエリで、「2010-06-06」と「2010-06-14」を独自の開始日と終了日で置き換えます (必ず YYYY-MM-DD 形式を使用してください):

<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY)
FROM `numbers` `n`
WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) < '2010-06-14';</code>

このクエリの結果を中間テーブルとして使用し、時間部分に基づいて元のデータ テーブルに対して LEFT JOIN を実行します。

<code class="language-sql">SELECT `x`.`ts` AS `timestamp`,
       COALESCE(`y`.`score`, 0) AS `cnt`
FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%m/%d/%Y') AS `ts`
      FROM `numbers` `n`
      WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) < '2010-06-14') `x`
LEFT JOIN `your_table` `y` ON DATE(`y`.`date_column`) = DATE(`x`.`ts`);</code>

日付形式を維持するには、上記の ts フィールドを DATE_FORMAT 関数でラップします。

<code class="language-sql">DATE_FORMAT(`x`.`ts`, '%d.%m.%Y') AS `timestamp`</code>

これらの手順に従うことで、MySQL データセット内の欠落している日付を効率的に埋めることができ、必要な日付範囲をシームレスに表現できるようになります。

以上がNumbers テーブルを使用して MySQL データセットの欠落している日付を埋める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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