ホームページ >データベース >mysql チュートリアル >Numbers テーブルを使用して MySQL データセットの欠落している日付を埋める方法
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 サイトの他の関連記事を参照してください。