首頁 > 資料庫 > mysql教程 > 如何用零值填入 MySQL 範圍的缺失日期?

如何用零值填入 MySQL 範圍的缺失日期?

Linda Hamilton
發布: 2025-01-23 16:47:09
原創
552 人瀏覽過

How to Fill Missing Dates in a MySQL Range with Zero Values?

MySQL日期範圍填入缺失值

假設您有一個包含兩個欄位(日期和分數)的表,您希望填入缺失日期以獲得連續的值序列。例如,如果您的表格目前包含以下資料:

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-04  14
2010-08-07  10
2010-08-10  14</code>
登入後複製

您希望用0填滿缺失的日期(2010-08-03、2010-08-05和2010-08-06),以獲得以下結果:

<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>
登入後複製

以下是查詢的細分:

  • 建立一個有自動遞增值的數字表(numbers)。
  • 使用DATE_ADD從指定的起始日期(範例中為'2010-06-06')建構日期列表,並根據numbers表中數字的id遞增天數。
  • 使用LEFT JOIN根據日期部分將日期清單與您的原始表y合併。
  • 使用COALESCE將y.score中的任何空值替換為0。
  • 如果需要,可以使用DATE_FORMAT來變更日期格式。

請將your_table替換為您實際的表名。 確保您有一個名為numbers的表,其中包含一個名為id的自動遞增列,該列包含從1開始的連續整數。 如果沒有,您需要先建立一個。 例如: CREATE TABLE numbers (id INT AUTO_INCREMENT PRIMARY KEY); 然後插入足夠數量的記錄以覆蓋您的日期範圍。

以上是如何用零值填入 MySQL 範圍的缺失日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板