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 日历年,但您可以扩展以涵盖您想要的任何范围。
我正在编写此查询,它获取一个行值,它将 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 日历年,但您可以扩展以涵盖您想要的任何范围。