首页 > 解决方案 > 即使在特定日期没有访问,如何编辑此查询以获得最近 7 天的访问?

问题描述

我有以下查询,它返回first_visit从今天开始到 7 天前的日期,以及hash每天的访问者:

SET time_zone= '{$company_timezone}';
SELECT DATE( first_visit ) AS day , COUNT( DISTINCT hash ) AS total
FROM table
WHERE company = 1 and first_visit > SUBDATE( CURDATE( ) , 7 )
GROUP BY day

这样做的缺陷是,如果company = 1只有今天和三天前有访客,我会得到这个:

day --------- total
2020-03-08 ----- 30
2020-03-05 ----- 40

省略其间的所有其他日期。

我想要的是获得过去 7 天的所有时间,即使根本没有访客。如果没有访客,那么它应该只显示 0。

如何编辑我的查询以实现此目的?

谢谢

标签: phpmysqlsqldategroup-by

解决方案


如果您每天都有数据——但没有该公司的数据——那么条件聚合是一种非常简单的方法:

SELECT DATE( first_visit ) AS day ,
       COUNT( DISTINCT CASE WHEN company = 1 THEN hash END ) AS total
FROM table
WHERE first_visit > SUBDATE( CURDATE( ) , 7 )
GROUP BY day;

这仅适用于某些公司的所有日期都显示在您的表格中的情况。


推荐阅读