如何在MySQL中选择最近30天的日期,即使这些日期在MySQL中不存在?

如何在MySQL中选择最近30天的日期,即使这些日期在MySQL中不存在?,mysql,Mysql,在这里,我需要获取过去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

在这里,我需要获取过去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中,是否可以列出所有日期。或任何其他解决方法。我正在使用PHP7.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天内的所有日期,计数为0,在
表1中找不到任何条目:

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;

没有简单的方法。您可能会发现这一点很有用,但并不直接相关:如果您的数据没有可用于选择和筛选的信息,那么它就没有可用于选择和筛选的信息。假设您对数据内容一无所知,并且被要求手动查看数据并查找过去30天的记录。你找到一张没有日期的唱片。你是做什么的?除非你的导师告诉你如何处理无日期的条目,否则你将不得不忽略它们。这里也一样-要么说需要发生什么,要么SQL忽略它们。定义
数据在mysql中不存在
如果数据没有保存在数据库中,就没有办法获取它。您可以看到上一次更新表的时间,但是MySQL不按行存储这些信息。再读一遍,我想我现在明白你的意思了。您需要选择blah blah blah或lastUpdate为空的blah blah blah。您可以始终使用它,这是一些数据库的在线测试,包括MySQL:)@Prix非常感谢,我已经使用它修改了答案@Guido Thank You。我试试这个。如果我有数千行,这会更好吗。只是想有最好的选择。保持它为正。@Guido此操作不起作用,因为如果我有1条日期记录,它仍将返回0。你有解决这个问题的办法吗。它还返回32行,返回当前日期的2个结果集。@SameerJain您能提供更多的示例数据吗?查询返回了问题中示例的30行和预期计数–请参阅