지역 | 시작일자 | 종료일자 | |
서울 | 2020-06-01 | 2020-06-30 | |
서울 | 2020-07-01 | 2020-07-05 | |
대전 | 2020-07-06 | 2020-07-31 | |
대전 | 2020-08-01 | 2020-08-05 | |
대전 | 2020-08-06 | 2020-08-15 | |
서울 | 2020-08-16 | 2020-08-20 | |
서울 | 2020-08-21 | 2020-09-05 |
안녕하세요.
위에 보시는 것 처럼 기간이 레코드마다 기간이 연결되어 있구요.
그런데 지역별로 기간을 그룹핑해서 보여주고 싶습니다.
아래와 같이요 ㅠㅠ
지역 | 시작일자 | 종료일자 | |
서울 | 2020-06-01 | 2020-07-05 | |
대전 | 2020-07-06 | 2020-08-15 | |
서울 | 2020-08-16 | 2020-09-05 |
이렇게요. ㅠㅠ
읽어주셔서 감사합니다.
WITH t AS ( SELECT '서울' loc, '2020-06-01' sdt, '2020-06-30' edt FROM dual UNION ALL SELECT '서울', '2020-07-01', '2020-07-05' FROM dual UNION ALL SELECT '대전', '2020-07-06', '2020-07-31' FROM dual UNION ALL SELECT '대전', '2020-08-01', '2020-08-05' FROM dual UNION ALL SELECT '대전', '2020-08-06', '2020-08-15' FROM dual UNION ALL SELECT '서울', '2020-08-16', '2020-08-20' FROM dual UNION ALL SELECT '서울', '2020-08-21', '2020-09-05' FROM dual ) SELECT loc , MIN(sdt) sdt , MAX(edt) edt FROM (SELECT loc, sdt, edt , SUM(flag) OVER(PARTITION BY loc ORDER BY sdt) grp FROM (SELECT loc, sdt, edt , DECODE( LAG(edt) OVER(PARTITION BY loc ORDER BY sdt) , TO_CHAR(TO_DATE(sdt, 'yyyy-mm-dd') - 1, 'yyyy-mm-dd') , 0, 1) flag FROM t ) ) GROUP BY loc, grp ORDER BY sdt ; -- http://gurubee.net/lecture/2855