1. group by와 order by로 가져왔다
근데... rn땜시 이게 group by해도 중복제거가 안된다;;
SELECT ORGANIZATION, RN FROM (
SELECT
APTMT_YMD
, APTMT_CD
, ORGCD
, LAG(APTMT_YMD) OVER(ORDER BY APTMT_YMD) AS APTMT_PREV
, LEAD(APTMT_YMD) OVER(ORDER BY APTMT_YMD) AS APTMT_NEXT
, HDQTS_ORGNM || ' ' || DEPT_ORGNM || ' ' || DEPTMT_ORGNM|| ' '|| TEAM_ORGNM AS ORGANIZATION
, ROW_NUMBER() OVER (ORDER BY APTMT_YMD DESC) AS RN
FROM TB_APTMT_MTTR
WHERE APTMT_CD NOT IN ('00D5', '00D9', '00B5', '00D2', '00D6', '00D0', '00D3', '00AC','00J2') -- 직위,직급,직렬 안 바뀌는 발령 코드
AND empno = '115726'
ORDER BY APTMT_YMD DESC
)
WHERE
(TO_CHAR(TRUNC(SYSDATE) - INTERVAL '5' YEAR, 'YYYYMMDD') BETWEEN APTMT_PREV AND APTMT_NEXT
OR APTMT_YMD BETWEEN TO_CHAR(TRUNC(SYSDATE) - INTERVAL '5' YEAR, 'YYYYMMDD') AND TO_CHAR(TRUNC(SYSDATE)))
GROUP BY ORGANIZATION, RN
ORDER BY RN
그래서 rn을 없애고 group by하니깐..
중복제거는 되는데 순서가 뒤죽박죽임ㅋㅋ
해결방법 ---> partition 을 써서 값을 해당하는것 하나만 뽑아내자
여기서 rn = 1 추가 하면
SELECT ORGANIZATION, RN FROM (
SELECT
APTMT_YMD
, APTMT_CD
, ORGCD
, LAG(APTMT_YMD) OVER(ORDER BY APTMT_YMD) AS APTMT_PREV
, LEAD(APTMT_YMD) OVER(ORDER BY APTMT_YMD) AS APTMT_NEXT
, HDQTS_ORGNM || ' ' || DEPT_ORGNM || ' ' || DEPTMT_ORGNM|| ' '|| TEAM_ORGNM AS ORGANIZATION
, ROW_NUMBER() OVER (PARTITION BY HDQTS_ORGNM || ' ' || DEPT_ORGNM || ' ' || DEPTMT_ORGNM|| ' '|| TEAM_ORGNM ORDER BY APTMT_YMD DESC) AS RN
FROM TB_APTMT_MTTR
WHERE APTMT_CD NOT IN ('00D5', '00D9', '00B5', '00D2', '00D6', '00D0', '00D3', '00AC','00J2') -- 직위,직급,직렬 안 바뀌는 발령 코드
AND empno = '115726'
ORDER BY APTMT_YMD DESC
)
WHERE
(TO_CHAR(TRUNC(SYSDATE) - INTERVAL '5' YEAR, 'YYYYMMDD') BETWEEN APTMT_PREV AND APTMT_NEXT
OR APTMT_YMD BETWEEN TO_CHAR(TRUNC(SYSDATE) - INTERVAL '5' YEAR, 'YYYYMMDD') AND TO_CHAR(TRUNC(SYSDATE)))
AND RN = 1
'업무용 > 오라클' 카테고리의 다른 글
pivot 피벗 /with 임시테이블 (0) | 2024.05.09 |
---|---|
다른테이블 쿼리값 한 row로 합치기 //full outer join (0) | 2024.05.08 |
LAG, LEAD (이전값, 다음값) (0) | 2024.05.03 |
merge into (update insert동시에) (0) | 2024.04.17 |
TO_NUMBER(컬럼명) - 문자열을 숫자로 만들어줌 (0) | 2024.04.04 |