我有一個連接到資料庫的表格,所以這個表格可以有更多的塊,每個塊都有日期,例如日期到
| 堵塞 | 日期_從 | 日期_直到 |
|---|---|---|
| 1 | 25.07.2022 | 2022 年 8 月 11 日 |
| 2 | 05.08.2022 | 15.08.2022 |
| 3 | 2022 年 8 月 10 日 | 20.08.2022 |
| 4 | 2022 年 8 月 11 日 | 05.09.2022 |
我正在嘗試SELECT發表宣告,顯示 和 之間的天01.08.2022數31.08.2022。
- 第一個區塊 date_from = 25.07.2022, date_until = 11.08.2022 ->11 天
- 第二塊和第三塊應該保持 NULL 或一些默認文本,因為這些塊的間隔在第四塊。
- 第四個區塊 date_from = 11.08.2022, date_until = 05.09.2022-> 20 天(直到月底)。
你能幫我創建這個選擇嗎?選擇應該有date_from,date_until和number of days。
uj5u.com熱心網友回復:
WITH data(Block,Date_From,Date_until) AS (
SELECT 1, TO_DATE('25.07.2022','DD.MM.YYYY'), TO_DATE('11.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
SELECT 2, TO_DATE('05.08.2022','DD.MM.YYYY'), TO_DATE('15.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
SELECT 3, TO_DATE('10.08.2022','DD.MM.YYYY'), TO_DATE('20.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
SELECT 4, TO_DATE('11.08.2022','DD.MM.YYYY'), TO_DATE('05.09.2022','DD.MM.YYYY') FROM DUAL -- UNION ALL
),
clipped(Block,Date_From,Date_until) AS (
SELECT Block, GREATEST(Date_From, TO_DATE('01.08.2022','DD.MM.YYYY')), LEAST(Date_until, TO_DATE('31.08.2022','DD.MM.YYYY')) FROM DATA
)
SELECT c.*,
CASE WHEN NOT(
EXISTS(SELECT 1 FROM clipped d WHERE d.Date_From < c.Date_until AND d.Date_until > c.Date_From AND d.block < c.block)
AND
EXISTS(SELECT 1 FROM clipped d WHERE d.Date_From < c.Date_until AND d.Date_until > c.Date_From AND d.block > c.block) )
THEN c.Date_until - c.Date_from ELSE NULL
END AS days
FROM clipped c
ORDER BY c.block
;
1 01/08/22 11/08/22 10
2 05/08/22 15/08/22
3 10/08/22 20/08/22
4 11/08/22 31/08/22 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532692.html
標籤:sql甲骨文
