MySQL 获取两个给定日期之间每天的记录数

MySQL get number of records in each day between two given dates

我正在编写此查询,它获取一个行值,它将 return 两个给定日期之间该行每天的记录数,如果有 returns 0那天没有记录。

我在过去一周内编写了一个执行此操作的查询。

当前查询:

select d.day, count(e.event) as count
                      from ( 
                            select 0 day union all 
                            select 1 union all 
                            select 2 union all 
                            select 3 union all 
                            select 4 union all
                            select 5 union all 
                            select 6 
                           ) d 
                      left join event e
                           on e.timestamp >= current_date - interval d.day day
                           and e.timestamp < current_date - interval (d.day - 1) day 
                           and e.event = ?
                      group by d.day

问题是 returns 只有固定天数的结果。我希望能够给它两个日期(开始日期和结束日期)并获取每天的记录数我不知道中间有多少个日期。

可以use/create一个真正的日历table。像这样:

SELECT
    d.day,
    COUNT(e.timestamp) AS cnt
FROM
(
    SELECT '2020-01-01' AS day UNION ALL
    SELECT '2020-01-02' UNION ALL
    ...
    SELECT '2020-12-31'
) d
LEFT JOIN event e
    ON e.timestamp >= d.day AND e.timestamp < DATE_ADD(d.day, INTERVAL 1 DAY)
WHERE
    d.day BETWEEN <start_date> AND <end_date>
GROUP BY
    d.day;

我只涵盖了 2020 日历年,但您可以扩展以涵盖您想要的任何范围。