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

问题描述 投票:0回答:1

我正在写此查询,它在其中获取行值,它将返回在两个给定日期之间该行每天的记录数,如果当天没有记录,则返回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

问题是,此方法仅返回固定天数的结果。我希望能够给它两个日期(开始和结束日期),并获取我不知道该天数的每一天的记录计数日期之间的间隔。

mysql sql database rdbms
1个回答
0
投票

您应该使用/创建一个真实的日历表。像这样的东西:

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)
GROUP BY
    d.day;
© www.soinside.com 2019 - 2024. All rights reserved.