데이터가
시작 | 종료
1800 | 1930
2030 | 2100
2100 | 2330
이렇게 시작 종료시간이 주어진다면
1800 ~ 1900 시 1row
2030 ~ 2330 시 1row 연속 된 시간끼리 그룹으로 묶어 이렇게 두개가 나오는
쿼리는 어떻게 해야 될까요?
WITH t AS ( SELECT '1800' stm, '1930' etm FROM dual UNION ALL SELECT '2030', '2100' FROM dual UNION ALL SELECT '2100', '2330' FROM dual ) SELECT MIN(stm) stm , MAX(etm) etm FROM (SELECT stm, etm , SUM(flag) OVER(ORDER BY stm) grp FROM (SELECT stm, etm , DECODE(LAG(etm) OVER(ORDER BY stm), stm, 0, 1) flag FROM t ) ) GROUP BY grp ORDER BY grp ;