簡體   English   中英

Oracle SQL - 如何創建通用日期期間(使用 MATCH_RECOGNIZE?)

[英]Oracle SQL - How to create common date periods (using MATCH_RECOGNIZE?)

我將日期划分為正確的時期有問題。 這是一個例子:

ID 數數 代碼 date_from date_to
4364 2 201 2022 年 1 月 8 日 15:00:00 2022 年 10 月 9 日 22:00:00
4364 2 201 13/09/2022 05:20:00 2022 年 9 月 30 日 17:00:00
4364 2 4013 29/08/2022 04:48:00 19/11/2022 13:43:00

我的目標是獲得這些日期的共同時期,因此在這種情況下它將是:

預期結果:

29/08/2022 15:00 - 10/09/2022 22:00

13/09/2022 05:20 - 30/09/2022 17:00

替代案例:

IF
201 - the same two rows
4013 - 10/08/2022 - 08/09/2022
THEN EXPECTED RESULT:
10/08/2022 - 08/09/2022
13/09/2022 - 30/09/2022

IF
201 - the same two rows
4013 - 15/09/2022 - 22/09/2022
THEN EXPECTED RESULT:
01/08/2022 - 10/09/2022
15/09/2022 - 22/09/2022

IF
201 - the same two rows
4013 - 11/09/2022 - 12/09/2022
THEN EXPECTED RESULT:
NULL (zero rows)

棘手的部分是每個“代碼”已經正確返回句點(這就是為什么 201 有兩個句點),所以我需要以某種方式組合不同的代碼

我正在使用這樣的東西(但如果“代碼 4013”與 201 的兩個日期重疊,它就不能正常工作)

 SELECT * 
   FROM table_gtt
 MATCH_RECOGNIZE (PARTITION BY id
                  ORDER     BY date_from, date_to
                  MEASURES
                      MIN(date_from)         date_from
                     ,MAX(date_to)           date_to
                  PATTERN (overlap* last_row)
                  DEFINE
                    overlap AS MAX(date_to) >= NEXT(date_from)
                  ) 

誰能知道如何解決這個問題?

數據:

CREATE GLOBAL TEMPORARY TABLE table_gtt
ON COMMIT PRESERVE ROWS
AS
select 4364 id, 2 count, 201 code, TO_DATE('01/08/2022 15:00', 'DD/MM/YYYY HH24:MI') date_from, TO_DATE('10/09/2022 22:00', 'DD/MM/YYYY HH24:MI') date_to from dual
union all
select 4364 id, 2 count, 201 code, TO_DATE('13/09/2022 05:20', 'DD/MM/YYYY HH24:MI') date_from, TO_DATE('30/09/2022 17:00', 'DD/MM/YYYY HH24:MI') date_to from dual
union all
select 4364 id, 2 count, 4013 code, TO_DATE('29/08/2022 04:48', 'DD/MM/YYYY HH24:MI') date_from, TO_DATE('19/11/2022 13:43', 'DD/MM/YYYY HH24:MI') date_to from dual;

如果您無法定義數據的唯一 PARTITION,您將無法使用 MATCH_RECOGNIZE 執行任務。

如果您確定日期間隔在 (id, code) 對中不相交,則最好嘗試使用 self JOIN,否則您必須先按分區 (id, code) 合並(該部分可以使用 MATCH_RECOGNIZE 完成)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM