在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中文網其他相關文章!