오라클 11g 에요
근무기간이
A부서에서 20200101~20211231
A부서에서 20220101~20220930
B부서에서 20221001~20221231
A부서에서 20230101~20230608
이런식으로 데이터가 쌓여있는데
같은부서에서 연속 근무한 경우에는 해당구간을 아래처럼 합하고 싶은데
A부서 20200101~20220930
B부서 20221001~20221231
A부서 20230101~20230608
주욱 같은부서인데도 근무이력이 여러번 쪼개진 경우가 있어서 이걸 합치는데 어려워서 문의드려요
Select 사번 ,부서코드,근무시작일,근무종료일
From 근무이력
이 데이터를 가지고 구간별로 근무기간을 합칠 수 있는 방법이 있을까요?
위의 링크는 연속된 일자를 합치는 것입니다.
아래 링크는 연속된 기간를 합치는 것입니다.
http://gurubee.net/lecture/2855
WITH t AS ( SELECT 1 empno, 'A부서' deptno, '20200101' sdt, '20211231' edt FROM dual UNION ALL SELECT 1, 'A부서', '20220101', '20220930' FROM dual UNION ALL SELECT 1, 'B부서', '20221001', '20221231' FROM dual UNION ALL SELECT 1, 'A부서', '20230101', '20230608' FROM dual ) SELECT empno , deptno , MIN(sdt) sdt , MAX(edt) edt FROM (SELECT empno, deptno, sdt, edt , SUM(flag) OVER(PARTITION BY empno, deptno ORDER BY sdt) grp FROM (SELECT empno, deptno, sdt, edt , DECODE( LAG(edt) OVER(PARTITION BY empno, deptno ORDER BY sdt) , TO_CHAR(TO_DATE(sdt, 'yyyymmdd') - 1, 'yyyymmdd') , 0, 1) flag FROM t ) ) GROUP BY empno, deptno, grp ORDER BY empno, sdt ;