안녕하세요 인사팀 전산을맡고있습니다. 오늘 쿼리짜다 5시간동안해메서 질문드립니다.
발령테이블, 부서직무테이블 두개 조인해서 결과데이터를 뽑아내야하는데 잘안됩니다...ㅠ
주마스터테이블이 발령테이블입니다.
발령테이블에 데이터는 컬럼 발령일자, 부서에 5건이 있습니다.
발령일자 부서
19840501 편집국
19841101 사회부
19890708 정치부
19980212 정치부
20040101 주간부
부서직무테이블에 데이터는 컬럼 업무시작일, 부서, 직무내용에 4건이 있습니다.
업무시작일 부서 직무내용
19841101 사회부 기동팀
19890708 정치부 정당팀
20000101 정치부 뉴욕 담당
20040101 주간부 주간 제작 총괄지휘
이 두 테이블을 잘 조인해서 발령테이블 기준으로
발령일자, 부서 직무내용 을 뽑아내야합니다.
아래 데이터가 제가 원하게 뽑아야하는 5건 데이터입니다.
발령일자 부서 직무내용
19840501 편집국 null
19841101 사회부 기동팀
19890708 정치부 정당팀
19980212 정치부 뉴욕담당
20040101 주간부 주간 제작 총괄지휘
발령일자와 업무시작일자가 정확히 매칭이 안되서 어렵습니다.ㅠ
4번째 줄 직무내용 컬럼에 뉴욕담당이 들어가는게 핵심인거같습니다. 발령일자와 제일가까운 일시작일자 업무내용이 뉴욕담당이기 때문입니다. 고수님들 답변부탁드립니다!!!
WITH t1 AS ( SELECT 1 empno, '19840501' dt, '편집국' dept FROM dual UNION ALL SELECT 1, '19841101', '사회부' FROM dual UNION ALL SELECT 1, '19890708', '정치부' FROM dual UNION ALL SELECT 1, '19980212', '정치부' FROM dual UNION ALL SELECT 1, '20040101', '주간부' FROM dual ) ,t2 AS ( SELECT 1 empno, '19841101' dt, '사회부' dept, '기동팀' jikmu FROM dual UNION ALL SELECT 1, '19890708', '정치부', '정당팀' FROM dual UNION ALL SELECT 1, '20000101', '정치부', '뉴욕 담당' FROM dual UNION ALL SELECT 1, '20040101', '주간부', '주간 제작 총괄지휘' FROM dual ) SELECT a.empno, a.dt, a.dept , b.dt, b.jikmu FROM (SELECT empno, dt, dept , TO_DATE(dt, 'yyyymmdd') sdt , LEAD(dt, 1, '99991231') OVER(PARTITION BY empno ORDER BY dt) edt FROM t1 ) a , t2 b WHERE a.empno = b.empno(+) AND a.dept = b.dept(+) AND a.dt <= b.dt(+) AND a.edt > b.dt(+) ORDER BY a.empno, a.dt ;