안녕하세요 ~* 간단한 질문일수도 있는데 생각이 안나서 문의드립니다.
계약테이블이 있는데 거기에 이름, 계약시작일, 계약종료일 컬럼이3개가 있다고 하면요.
이름 | 계약시작일| 계약종료일 |
홍길동|20210101|20210331|
홍길동|20210405|20210425|
홍길동|20210426|20210430|
홍길동|20210501|20211231|
홍길동|20220104|20220131|
이렇게 데이터가 5건이 들어있다고 하면 쿼리로 어떻게 이어져 있는 계약만 뽑아올 수 있을까요?
홍길동|20210405|20211231| <===요렇게 이어져 있는 3건의 최소값 최대값을 뽑아내고 싶어서요. ㅠㅠ
다들 바쁘실텐데 답변 주시면 정말 감사할거 같습니다. (--)(__)
WITH t AS ( SELECT '홍길동' nm, '20210101' sdt, '20210331' edt FROM dual UNION ALL SELECT '홍길동', '20210405', '20210425' FROM dual UNION ALL SELECT '홍길동', '20210426', '20210430' FROM dual UNION ALL SELECT '홍길동', '20210501', '20211231' FROM dual UNION ALL SELECT '홍길동', '20220104', '20220131' FROM dual ) SELECT nm , MIN(sdt) sdt , MAX(edt) edt , COUNT(*) cnt FROM (SELECT nm, sdt, edt , SUM(flag) OVER(PARTITION BY nm ORDER BY sdt) grp FROM (SELECT nm, sdt, edt , DECODE( LAG(edt) OVER(PARTITION BY nm ORDER BY sdt) , TO_CHAR(TO_DATE(sdt, 'yyyymmdd') - 1, 'yyyymmdd') , 0, 1) flag FROM t ) ) GROUP BY nm, grp -- HAVING COUNT(*) > 1 -- 이어진 계약만 추출 ORDER BY nm, grp ; -- http://gurubee.net/lecture/2194