我有一个 mysql 表,其中包含与日期相关的数据。每行都有数据和日期,如下所示:
2009-06-25 75
2009-07-01 100
2009-07-02 120
我有一个 mysql 查询,可以选择两个日期之间的所有数据。这是查询:
SELECT data FROM tbl WHERE date BETWEEN date1 AND date2
我的问题是,即使一天没有数据,我也需要获取 date1 和 date2 之间的行。
所以我的查询会错过 2009-06-25 和 2009-07-01 之间的空日期。
我可以以某种方式将这些日期添加为只有 0 的数据吗?
最佳答案
您可以使用经常被称为“日历表”的概念。 Here是关于如何在 MySql 中创建日历表的一个很好的指南:
-- create some infrastructure
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
-- only works for 100 days, add more ints joins for more
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
ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
您可能希望创建表 cal
而不是子选择。
关于Mysql:选择两个日期之间的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080207/