아래와 같이 사원발령 테이블에서 조건일자 이전 발령 사항 중에서
해당 코드에 해당하는 최근 값 및 조건일자 이전 최근 발령사항 (부서 등등) 자료를 조회 하고 싶습니다. -> 사번당 한건데이터
쿼리는 아래처럼 작성하였는데 비효율적인것 같아 질문드립니다.
테이블을 한번만 읽고도 조회가 가능한지요?
사번 |
발령코드 |
발령일자 |
부서 |
111111 |
10 |
19980101 |
AAA |
111111 |
20 |
20010301 |
BBB |
111111 |
30 |
20030305 |
CCC |
111111 |
40 |
20050606 |
DDD |
111111 |
50 |
20070809 |
EEE |
111111 |
60 |
20090709 |
FFF |
SELECT *
FROM (SELECT 사번,
MAX(DECODE(뱔령코드, '10', 발령일자, TO_DATE(NULL))) BAL_10, --최근 휴직일자
MAX(DECODE(뱔령코드, '20', 발령일자, TO_DATE(NULL))) BAL_20, --최근 승진
MAX(DECODE(뱔령코드, '30', 발령일자, TO_DATE(NULL))) BAL_30 --최근 부서이동 일자
FROM 사원테이블
WHERE 발령일자 < '20120101'
GROUP BY 사번) A,
(SELECT 사번, 발령코드, 부서, 발령일자, RNUM
FROM (SELECT 사번,
발령코드,
부서,
발령일자,
ROW_NUMBER() OVER(PARTITION BY 사번 ORDER BY 발령일자 DESC) RNUM
FROM 사원테이블
WHERE 발령일자 < '20120101'
)
WHERE RNUM = 1) B
WHERE A.사번 = B.사번
|