在MySQL 中填充日期範圍的資料間隙
人們可能會遇到需要檢索兩個特定日期之間的資料的情況,即使該範圍內的某些日期沒有條目。為了應對這項挑戰,一種流行的方法是創建「日曆表」。
考慮以下表格結構:
CREATE TABLE data ( date DATE, value INT ); INSERT INTO data VALUES ('2009-06-25', 75), ('2009-07-01', 100), ('2009-07-02', 120);
檢索「2009-06-25」和「2009-06-25」之間的所有資料' 2009-07-01',可以使用以下查詢:
SELECT date, value FROM data WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
但是,此查詢將排除指定範圍內沒有與之關聯的資料的任何日期。為了解決這個問題,使用了日曆表。
要為給定的日期範圍建立日曆表,可以採取以下步驟:
CREATE TABLE cal ( date DATE ); INSERT INTO cal (date) SELECT DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) FROM ints i CROSS JOIN ints j WHERE DATE_ADD('2009-06-25', INTERVAL i * 10 + j DAY) BETWEEN '2009-06-25' AND '2009-07-01';
日曆表將包含所有日期在「2009-06-25」和「2009-07 -01”之間,但沒有任何關聯資料。要檢索所需的資料以及間隙,可以使用左連接:
SELECT cal.date, data.value FROM cal LEFT JOIN data ON cal.date = data.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
此查詢將傳回指定範圍內的所有日期,包括那些沒有資料的日期,這些日期將以NULL 值表示值列。
以上是如何填入 MySQL 查詢中缺少的日期以獲得完整的日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!