일자별로 로그를 시작일과 종료일로 구분하여 쿼리하고 싶은데 방법이 구분이 반복되다 보니 잘 안되어서요.
Q&A 찾아 보고는 있는데 비슷한 질문이 없어서 올려 봅니다.
데이터는 아래와 같습니다.
일자 구분
2016-07-01 Y
2016-07-02 Y
2016-07-03 N
2016-07-04 Y
2016-07-05 N
2016-07-06 N
2016-07-07 N
2016-07-08 N
2016-07-09 N
2016-07-10 N
2016-07-11 N
2016-07-12 Y
2016-07-13 Y
2016-07-14 Y
2016-07-15 Y
2016-07-16 Y
2016-07-17 Y
출력되어야 할 결과는
시작일 | 종료일 | 구분 |
2016-07-01 | 2016-07-02 | Y |
2016-07-03 | 2016-07-03 | N |
2016-07-04 | 2016-07-04 | Y |
2016-07-05 | 2016-07-11 | N |
2016-07-12 | 2016-07-17 | Y |
WITH T AS ( SELECT TO_DATE('2016-07-01','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-02','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-03','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-04','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-05','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-06','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-07','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-08','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-09','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-10','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-11','yyyy-mm-dd') DT, 'N' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-12','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-13','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-14','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-15','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-16','yyyy-mm-dd') DT, 'Y' FG FROM DUAL UNION ALL SELECT TO_DATE('2016-07-17','yyyy-mm-dd') DT, 'Y' FG FROM DUAL ) SELECT MIN(DT) MINDT, MAX(DT) MAXDT, MAX(FG) FG FROM (SELECT DT, FG, SUM(DECODE(FG, FG2, 0, 1)) OVER (ORDER BY DT) FG3 FROM (SELECT DT, FG, LAG(FG) OVER (ORDER BY DT) FG2 FROM T)) GROUP BY FG3 ORDER BY MINDT