我的情况是,我需要获取过去 30 天的数据并获取所有日期,即使数据不在 mysql 中也是如此 给定日期。
我当前的查询是这样的。 lastUpdated 是时间戳列
SELECT Date(a.lastUpdated), count(*)
FROM table1 a
LEFT JOIN table2 b on (a.pgid = b.prod_id)
WHERE Date(lastUpdated) BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY Date(a.lastUpdated);
这个返回结果是这样的
Date(a.lastUpdated) count(*)
2016-03-23 1
2016-03-24 14
2016-03-30 65
2016-03-31 1
2016-04-02 1
我的问题是即使数据不在 mysql 中,是否可以列出所有日期。或任何其他解决方法。我正在使用 PHP 7.0。
我环顾四周,但没有找到任何与我的要求相关的东西。
最佳答案
假设一个简化的示例表 table1
具有以下内容
CREATE TABLE table1 (lastUpdated datetime);
INSERT INTO table1 (lastUpdated) VALUES ('2016-03-23');
INSERT INTO table1 (lastUpdated) VALUES ('2016-03-24');
INSERT INTO table1 (lastUpdated) VALUES ('2016-03-30');
INSERT INTO table1 (lastUpdated) VALUES ('2016-03-31');
INSERT INTO table1 (lastUpdated) VALUES ('2016-04-02');
INSERT INTO table1 (lastUpdated) VALUES ('2016-03-31');
然后下面的 MySQL 语句将返回过去 30 天内的所有日期,其中 table1
中没有条目的计数为 0:
SELECT lastUpdated, count(*)-1 FROM (
SELECT date(lastUpdated) as lastUpdated FROM table1 as t1
UNION ALL
SELECT curdate() - interval a day AS lastUpdated FROM (
select 0 as a union select 1 union select 2 union select 3 union
select 4 union select 5 union select 6 union select 7 union
select 8 union select 9 union select 10 union select 11 union
select 12 union select 13 union select 14 union select 15 union
select 16 union select 17 union select 18 union select 19 union
select 20 union select 21 union select 22 union select 23 union
select 24 union select 25 union select 26 union select 27 union
select 28 union select 29
) as t2
) as t3 GROUP BY lastUpdated;
关于mysql - 即使日期不在 MySQL 中,如何在 MySQL 中选择最近 30 天的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377941/