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 協議》,轉載必須註明作者和本文連結