我有兩個表:第一個包含間隔的開始和結束:
------------------------------
DATE_START | DATE_END
------------------------------
2020-01-04 2023-07-04
------------------------------
第二個是帶有日期和布爾“特殊日子”指示器的日歷:
------------------------------
DATE | SPECIAL_DAY_FLAG
------------------------------
2020-01-04 1
------------------------------
2020-01-05 0
------------------------------
所以我需要一個查詢,它只回傳第一個表中的行,其中 DATE_START 和 DATE_END 之間的“特殊日子”數大于 14。
uj5u.com熱心網友回復:
您可以根據第一個表的日期范圍(我稱之為“間隔”)加入第二個表(我稱之為“日歷”);根據標志值過濾那些連接的記錄,并計算有多少匹配項;最后用于having檢查計數是否為 14 或更多:
select i.date_start, i.date_end,
count(c.calendar_date) as special_days
from intervals i
join calendar c on c.calendar_date >= i.date_start and c.calendar_date <= i.date_end
where c.special_day_flag = 1
group by i.date_start, i.date_end
having count(c.calendar_date) >= 14
小提琴
...我假設間隔是包容性的-如果不是,則更改為< end_date.
如果您想計算總匹配天數以及特殊天數,您還可以使用條件聚合;這需要在子查詢中然后按特殊天數過濾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528821.html
標籤:sql甲骨文
