해당과 같은 테이블이 있고 시작시간과 종료시간이 들어가 있습니다
시작 | 종료 | |
1 | 2016-04-13 8:00 | 2016-04-13 10:00 |
2 | 2016-04-13 9:00 | 2016-04-13 12:00 |
3 | 2016-04-13 13:00 | 2016-04-13 14:00 |
4 | 2016-04-13 14:00 | 2016-04-13 15:00 |
5 | 2016-04-13 17:00 | 2016-04-13 22:00 |
6 | 2016-04-13 20:00 | 2016-04-13 22:00 |
해당 테이블을 시간순으로 표시하면 해당과 같이 됩니다.
CASE 1 :시간이 겹침
CASE 2: 시간이 연결됨
CASE 3: 다른 시작 종료 시간안에 포함
8:00 | 9:00 | 10:00 | 11:00 | 12:00 | 13:00 | 14:00 | 15:00 | 16:00 | 17:00 | 18:00 | 19:00 | 20:00 | 21:00 | 22:00 | |
1 | |||||||||||||||
2 | |||||||||||||||
3 | |||||||||||||||
4 | |||||||||||||||
5 | |||||||||||||||
6 |
이 테이블의 값을 최종적으로
시작 | 종료 |
2016-04-13 8:00 | 2016-04-13 12:00 |
2016-04-13 13:00 | 2016-04-13 15:00 |
2016-04-13 17:00 | 2016-04-13 22:00 |
이렇게 뽑아내고 싶습니다. 도와주세요
WITH T AS ( SELECT TO_DATE('2016-04-13 08:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 10:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 09:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 12:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 13:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 14:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 14:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 15:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 17:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 22:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 20:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 22:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL UNION ALL SELECT TO_DATE('2016-04-13 21:00:00','yyyy-mm-dd hh24:mi:ss') FROMDT , TO_DATE('2016-04-13 23:00:00','yyyy-mm-dd hh24:mi:ss') TODT FROM DUAL ) SELECT RN, MIN(FROMDT) FROMDT, MAX(TODT) TODT FROM (SELECT FROMDT, TODT , SUM(CASE WHEN MAXTODT >= FROMDT THEN 0 ELSE 1 END) OVER (ORDER BY FROMDT) RN FROM (SELECT FROMDT, TODT , MAX(TODT) OVER (ORDER BY FROMDT ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) MAXTODT FROM T)) GROUP BY RN ORDER BY RN