oracle sqlで、以下の実現するSQLをご教授お願い致します。
以下のようなテーブルデータがあるとき、
列3(start_date)と列4(end_date)の日時が重なる場合、
それらをマージした状態でSELECTしたいです。
この時、マージ対象となるレコードは、
列1,列2のセットが同じ値のものとします。
以下の例ですと、(C1,D1)と(C1,D2)のペア単位でマージとなります。
CREATEとINSERTはこちらです。
1CREATE TABLE KIKAN_MERGE_TB 2( 3 C1 VARCHAR2(10), 4 C2 VARCHAR2(10), 5 C3 DATE, 6 C4 DATE 7) 8 9INSERT ALL 10INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D1',TO_DATE('2020/05/01 09:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/01 12:00','YYYY/MM/DD HH24:MI')) 11INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D1',TO_DATE('2020/05/01 11:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/02 10:00','YYYY/MM/DD HH24:MI')) 12INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D1',TO_DATE('2020/04/30 07:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/03 11:00','YYYY/MM/DD HH24:MI')) 13INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D1',TO_DATE('2020/05/03 10:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/04 11:00','YYYY/MM/DD HH24:MI')) 14INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D1',TO_DATE('2020/05/04 18:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/05 11:00','YYYY/MM/DD HH24:MI')) 15INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D2',TO_DATE('2020/05/01 09:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/01 12:00','YYYY/MM/DD HH24:MI')) 16INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D2',TO_DATE('2020/05/01 12:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/02 10:00','YYYY/MM/DD HH24:MI')) 17INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D2',TO_DATE('2020/05/03 12:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/04 18:00','YYYY/MM/DD HH24:MI')) 18INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D2',TO_DATE('2020/05/05 10:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/05 15:00','YYYY/MM/DD HH24:MI')) 19INTO KIKAN_MERGE_TB(C1,C2,C3,C4) VALUES('C1','D2',TO_DATE('2020/05/05 14:00','YYYY/MM/DD HH24:MI'), TO_DATE('2020/05/05 18:00','YYYY/MM/DD HH24:MI')) 20select * from dual;
列1 列2 列3 列4
C1 D1 2020/05/01 09:00 2020/05/01 12:00
C1 D1 2020/05/01 11:00 2020/05/02 10:00
C1 D1 2020/04/30 07:00 2020/05/03 11:00
C1 D1 2020/05/03 10:00 2020/05/04 11:00
C1 D1 2020/05/04 18:00 2020/05/05 11:00 ※
C1 D2 2020/05/01 09:00 2020/05/01 12:00
C1 D2 2020/05/01 12:00 2020/05/02 10:00
C1 D2 2020/05/03 12:00 2020/05/04 18:00 ※
C1 D2 2020/05/05 10:00 2020/05/05 15:00
C1 D2 2020/05/05 14:00 2020/05/05 18:00
⇓マージ
列1 列2 列3 列4
C1 D1 2020/04/30 09:00 2020/05/04 11:00
C1 D1 2020/05/04 18:00 2020/05/05 11:00 ※
C1 D2 2020/05/01 09:00 2020/05/02 10:00
C1 D2 2020/05/03 12:00 2020/05/04 18:00 ※
C1 D2 2020/05/05 10:00 2020/05/05 18:00
※のレコードは、start_date,end_date共に、重なりがないため、そのまま表示となっております。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー