我正在写此查询,它在其中获取行值,它将返回在两个给定日期之间该行每天的记录数,如果当天没有记录,则返回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
问题是,此方法仅返回固定天数的结果。我希望能够给它两个日期(开始和结束日期),并获取我不知道该天数的每一天的记录计数日期之间的间隔。
您应该使用/创建一个真实的日历表。像这样的东西:
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;