【问题标题】:Show the last 30 days even if its not in the table显示过去 30 天,即使它不在表格中
【发布时间】:2015-06-26 00:50:56
【问题描述】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2016-11-30
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多