我有下表中的前 3 列,我想獲得第 4 列(沖突)。如果按帳戶進行磁區,開始日期和結束日期之間的時間段發生沖突,我想將其標記為“X”。
ACCOUNT START END CLASHING
----------------------------------------
1 30-Sep-21 28-Oct-21 NO
1 01-Jul-21 20-Aug-21 NO
2 30-Jul-21 28-Oct-21 YES
2 01-Jul-21 20-Aug-21 YES
uj5u.com熱心網友回復:
您可以使用:
SELECT t.*,
CASE
WHEN EXISTS(SELECT 1
FROM table_name x
WHERE x."START" < t."END"
AND x."END" > t."START"
AND x.account = t.account
AND x.ROWID != t.ROWID)
THEN 'YES'
ELSE 'NO'
END AS clashing
FROM table_name t
其中,對于樣本資料:
CREATE TABLE table_name (ACCOUNT, "START", "END") AS
SELECT 1, DATE '2021-09-30', DATE '2021-10-28' FROM DUAL UNION ALL
SELECT 1, DATE '2021-07-21', DATE '2021-08-20' FROM DUAL UNION ALL
SELECT 2, DATE '2021-07-30', DATE '2021-10-28' FROM DUAL UNION ALL
SELECT 2, DATE '2021-07-01', DATE '2021-08-20' FROM DUAL;
輸出:
帳戶 開始 結尾 沖突 1 30-SEP-21 21 年 10 月 28 日 不 1 21 年 7 月 21 日 20-8-21 不 2 21 年 7 月 30 日 21 年 10 月 28 日 是的 2 01-JUL-21 20-8-21 是的
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/327525.html
