统计数据按日期分组,没有的天补零,什么办

SELECT t1.created_date , COALESCE(t2.date_total_count,0) AS total
FROM(
SELECT @cdate:= DATE_ADD(@cdate,INTERVAL - 1 DAY) AS created_date
FROM (SELECT @cdate:=DATE_ADD('结束日期(2018-12-01)',INTERVAL + 1 DAY) FROM `随意一个表1`) tmp1
WHERE @cdate > '开始日期(2018-03-01)'
) t1 LEFT JOIN(
SELECT DATE_FORMAT(m.created_at,'%Y-%m-%d') AS created_date , COUNT(*) AS date_total_count
FROM `要统计的表`AS m
WHERE  m.created_at BETWEEN '2018-03-01 00:00:00' AND '2018-12-01 23:59:59'
GROUP BY DATE_FORMAT(m.created_at,'%Y-%m-%d')
) t2 ON t1.created_date = t2.created_date;

说明:

1.思路就是生成一个临时表(统计时间范围内的日期即2018-03-01,2018-03-02........)去左连(left join)要统计的表,没有记录的则补零COALESCE(t2.date_total_count,0)。

2.随意一个表1的记录count(*),要大于开始日期到结束日期的天数,否则生成的临时表统计的天数即t1.created_date会少,不全。(为什么?)

3.也不知道这样SELECT @cdate:=DATE_ADD('结束日期(2018-12-01)',INTERVAL + 1 DAY) FROM随意一个表1`) tmp1
WHERE @cdate > '开始日期(2018-03-01)'就能生成开始日期到结束日期的一列的临时表。

本作品采用《CC 协议》,转载必须注明作者和本文链接
一切皆自学
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!