统计数据按日期分组,没有的天补零,什么办
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 协议》,转载必须注明作者和本文链接