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



我正在尝试创建一个显示过去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

您可以在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();

然后将这个临时表与您的表连接起来,并执行计数:

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;

我会在代码中这样做:在绘制数据时,生成计数为0的缺失日期可能会更短。

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

相关内容

  • 没有找到相关文章

最新更新