[英]Identify count of days in a date range
您需要找到开始日期和结束日期之间的天数。 例如,在 event_id=1 的开始日期和结束日期之间有多少个星期一,依此类推。
在问题中,event_id=4 的 start_date 和 end_date 不正确,因为 start_date > end_date。 此外,evnet_id=4 的日期名称存在拼写错误。
修复数据问题后,用于获取结果的查询是 -
WITH RECURSIVE
date_gen (gen_dt) AS
(
SELECT min(start_date) from event_tab
union all
SELECT date_add(gen_dt,interval 1 day) from date_gen where gen_dt < (select max(end_date) from event_tab)
)
SELECT
e.event_id,
sum(case when dayname(d.gen_dt) = e.schedule_day then 1 else 0 end ) day_nos_as_run_count
FROM date_gen d, event_tab e
where
cast(d.gen_dt as date) between e.start_date and e.end_date
group by e.event_id
DB小提琴在这里。
递归查询示例帮助来自这里。
样本输出 -
event_id | day_nos_as_run_count |
---|---|
1 | 35 |
2 | 23 |
3 | 2 |
4 | 0 |
查询的另一个变体 -
WITH RECURSIVE
date_gen (gen_dt) AS
(
SELECT min(start_date) from event_tab
union all
SELECT date_add(gen_dt,interval 1 day) from date_gen where gen_dt < (select max(end_date) from event_tab)
)
SELECT
e.event_id,
count(d.gen_dt)
FROM event_tab e left join date_gen d
on ( cast(d.gen_dt as date) between e.start_date and e.end_date
and e.schedule_day = dayname(d.gen_dt))
group by e.event_id
order by e.event_id
首先以日期格式存储日期: 03-04-2022
应存储为2022-04-03
(假设您的格式为日-月-年)。 并存储到声明为DATE
而不是VARCHAR
的列中。
然后您就可以使用DATEDIFF()
函数来获取差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.