我有下表:
ID DATE_CREATION
-----------------
S1 01/01/2022
S2 04/01/2022
S3 07/01/2022
S4 09/01/2022
S5 10/01/2022
我想實作這個邏輯:最舊的行 (S1) 將有輸出 1。對于后續行,如果從上一個條目過去 5 天或更長時間,輸出 = 1,則將該輸出標記為 1 并繼續評估。
預期的輸出看起來像這樣(第 4 列用于解釋目的)。
ID DATE_CREATION OUTPUT OUTPUT_EXPLANATION
----------------------------------------------
S1 01/01/2022 1 It is the first entry
S2 04/01/2022 0 5 days have not passed since the last eligible entry (S1)
S3 07/01/2022 1 5 days have passed since the last eligible entry (S1)
S4 09/01/2022 0 5 days have not passed since the last eligible entry (S3)
S5 10/01/2022 0 5 days have not passed since the last eligible entry (S3)
uj5u.com熱心網友回復:
從 Oracle 12 開始,您可以使用:
SELECT id,
date_creation,
CASE RN WHEN 1 THEN 1 ELSE 0 END AS output
FROM table_name
MATCH_RECOGNIZE (
ORDER BY DATE_CREATION
MEASURES
COUNT(*) AS rn
ALL ROWS PER MATCH
PATTERN (five_days )
DEFINE
five_days AS date_creation < FIRST(date_creation) INTERVAL '5' DAY
)
其中,對于樣本資料:
CREATE TABLE table_name (ID, DATE_CREATION) AS
SELECT 'S1', DATE '2022-01-01' FROM DUAL UNION ALL
SELECT 'S2', DATE '2022-01-04' FROM DUAL UNION ALL
SELECT 'S3', DATE '2022-01-07' FROM DUAL UNION ALL
SELECT 'S4', DATE '2022-01-09' FROM DUAL UNION ALL
SELECT 'S5', DATE '2022-01-10' FROM DUAL;
輸出:
ID DATE_CREATION 輸出 S1 22 年 1 月 1 日 1 S2 22 年 1 月 4 日 0 S3 22 年 1 月 7 日 1 S4 22 年 1 月 9 日 0 S5 22 年 1 月 10 日 0
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457331.html
