[英]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.