首頁 > 資料庫 > mysql教程 > 如何填入 MySQL 查詢中兩個日期之間缺少的日期?

如何填入 MySQL 查詢中兩個日期之間缺少的日期?

Barbara Streisand
發布: 2024-12-16 22:14:13
原創
529 人瀏覽過

How to Populate Missing Dates in MySQL Queries Between Two Dates?

在MySQL 中擷取兩個日期之間的資料時填入缺失的日期

在MySQL 中,當使用BETWEEN 運算子選擇兩個日期之間的資料時,它是指定範圍內的某些日期可能沒有任何對應資料。這可能會導致查詢結果中出現空白行或缺失行。

問題陳述:

考慮一個名為「tbl」的表,其中包含與日期關聯的數據,如下所示:

Date Data
2009-06-25 75
2009-07-01 100
2009-07-02 120

如果我們想檢索'2009-06-25' 到'2009-06-25'之間的所有資料'2009-07-01' 使用以下查詢:

SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
登入後複製

查詢將僅傳回現有資料在指定範圍內的行。這意味著沒有任何數據的日期,例如“2009-06-26”、“2009-06-27”和“2009-06-28”,將從結果中省略。

解決方案:用於填充缺失日期的日曆表

解決此問題並包含所有日期在指定的範圍內,無論是否有數據,我們都可以利用一個稱為「日曆表」的概念。這些表有助於產生給定間隔內的日期序列,本質上充當所有可能日期的「偽」表。

以下是如何在 MySQL 中建立日曆表的範例:

-- Create a table with integers from 0 to 9
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

-- Generate a sequence of dates from '2009-06-25' to '2009-07-01'
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
登入後複製

建立日曆表後,您可以與資料表執行左連線以填入缺失的日期。以下是更新後的查詢:

SELECT cal.date, tbl.data
FROM (
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01'
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
登入後複製

此查詢會擷取指定範圍內的所有日期,包括「tbl」表中沒有任何資料的日期。缺少資料的日期將在「資料」列中具有 NULL 值。

以上是如何填入 MySQL 查詢中兩個日期之間缺少的日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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