우선순위 1에 겹치지 않는 우선순위 2의 구간을 결과로 검색하고 싶은데
잘 안떠올라서 고수분들께 여쭤봅니다.
테이블
시작일시 | 종료일시 | 우선순위 |
2020-09-01 08시 10분 | 2020-09-01 08시 20분 | 1 |
2020-09-01 08시 40분 | 2020-09-01 08시 55분 | 1 |
2020-09-01 08시 15분 | 2020-09-01 08시 50분 | 2 |
select '202009010810' as 시작일시, '202009010820' as 종료일시, 1 as 우선순위 from dual union all
select '202009010840' as 시작일시, '202009010855' as 종료일시, 1 as 우선순위 from dual union all
select '202009010815' as 시작일시, '202009010850' as 종료일시, 2 as 우선순위 from dual
우선순위 1에 포함되지 않는 우선순위 2의 시간을 구해야함.
결과
시작일시 | 종료일시 |
2020-09-01 08시 15분 | 2020-09-01 08시 40분 |
그림으로는 이런식으로 우선순위 2가 우선순위 1에 겹치지 않는
칠한 부분을 찾아보려는데요...잘 안되네요. ㅜㅜ;;
WITH t AS ( SELECT '202009010810' sdt, '202009010820' edt, 1 seq FROM dual UNION ALL SELECT '202009010840', '202009010855', 1 FROM dual UNION ALL SELECT '202009010815', '202009010850', 2 FROM dual ) SELECT sdt , edt FROM (SELECT dt sdt , LEAD(dt) OVER(ORDER BY dt) edt , SUM(SUM(s)) OVER(ORDER BY dt) s FROM (SELECT DECODE(lv, 1, sdt, edt) dt , DECODE(lv, seq, -1, 1) s FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 2) ) GROUP BY dt ) WHERE s > 0 ;