显示最近30天,即使它不在表中

时间:2015-06-26 00:50:56

标签: mysql date datetime time

我正在尝试创建一个显示过去30天的图表。我有查询并且它正在运行,但是因为我们刚刚开始我们只有今天的日期开始,我想要做的是过去30天也返回日期,总数将为0。

无论如何使用MYSQL做到这一点? 我当前的质询。

SELECT COUNT(DISTINCT(sessionkey)) as total, stamp as day,
    ROUND(UNIX_TIMESTAMP(stamp)/(60 * 60)) AS timekey 
FROM analytics 
WHERE stamp > date_sub(now(), interval 30 day) 
GROUP BY timekey

2 个答案:

答案 0 :(得分:0)

您可以在MySQL中执行此操作,但不建议这样做。

解决方案是:

填充临时表:

CREATE TEMPORARY TABLE last30days(
myday DATE);

在最后30天插入:

CREATE PROCEDURE last30DaysProc()
BEGIN
DECLARE v_i INT;
SET v_i=30;
WHILE(v_i>0) LOOP
INSERT INTO last30days(myday) VALUES (date_sub(NOW(), interval v_i days)); 
SET v_i=v_i-1;
END WHILE;
END;

CALL last30DaysProc();

然后将此临时表与您的表连接,并执行count:

SELECT 
COUNT(DISTINCT(sessionkey)) as total, 
a.myday as myday,
ROUND(UNIX_TIMESTAMP(stamp)/(60 * 60)) AS timekey 
FROM last30days a
LEFT JOIN analytics b ON a.myday=b.stamp
WHERE myday > date_sub(now(), interval 30 day) 
GROUP BY timekey;

我会在代码中执行此操作:在您绘制数据时,使用count = 0生成缺少日期可能会更短。

答案 1 :(得分:0)

我会在php网站上这样做,效率会更高。如果count小于30,则可以通过简单的foreach循环添加伪数据。