ホームページ >データベース >mysql チュートリアル >MySQL 範囲内の欠落している日付をゼロ値で埋める方法は?
MySQL の日付範囲が欠損値を埋める
2 つの列 (日付とスコア) を持つテーブルがあり、欠落している日付を埋めて連続した値のシーケンスを取得したいとします。たとえば、テーブルに現在次のデータが含まれているとします:
<code>日期 分数 ----------------- 2010-08-01 19 2010-08-02 21 2010-08-04 14 2010-08-07 10 2010-08-10 14</code>
次の結果を得るために、欠落している日付 (2010-08-03、2010-08-05、および 2010-08-06) を 0 で埋めたいとします:
<code>日期 分数 ----------------- 2010-08-01 19 2010-08-02 21 2010-08-03 0 2010-08-04 14 2010-08-05 0 2010-08-06 0 2010-08-07 10 2010-08-10 14</code>
これを実現するには、次のクエリを使用できます:
<code class="language-sql">SELECT x.ts AS timestamp, COALESCE(y.score, 0) AS cnt FROM (SELECT DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) AS ts FROM numbers n WHERE DATE_ADD('2010-06-06', INTERVAL n.id -1 DAY) < '2010-08-11') x LEFT JOIN your_table y ON DATE(x.ts) = DATE(y.date);</code>
クエリの内訳は次のとおりです:
your_table
を実際のテーブル名に置き換えてください。 1 から始まる連続した整数を含む numbers
という名前の自動インクリメント列を含む id
という名前のテーブルがあることを確認してください。 そうでない場合は、最初に作成する必要があります。 例: CREATE TABLE numbers (id INT AUTO_INCREMENT PRIMARY KEY);
次に、日付範囲をカバーするのに十分な数のレコードを挿入します。
以上がMySQL 範囲内の欠落している日付をゼロ値で埋める方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。