운영 DB : 오라클 9i
GROUP BY 대신에 PARTITION BY 를 사용하려 합니다.
CODE | YEAR | DESC |
1000 | 2001 | 2001년 변경사항 |
1000 | 2002 | 2002년 변경사항 |
이러한 데이터 유형인데
CUST_CODE를 그룹으로 MAX(YEAR) 가 되는 DESC 값을 가져오려고 합니다.
SELECT CODE, MAX(YEAR) OVER (PARTITION BY CODE), DESC FROM LOG_TABLE
해서 돌렸더니
CODE | MAX(YEAR) OVER (PARTITION BY CODE) | DESC |
1000 | 2002 | 2001년 변경사항 |
1000 | 2002 | 2002년 변경사항 |
이렇게 뜹니다
생각한 바로는
CODE | MAX(YEAR) OVER (PARTITION BY CODE) | DESC |
1000 | 2002 | 2002년 변경사항 |
요렇게 띄울려고 합니다.
수정할 부분 지적 부탁드립니다.
질문하실 때 특정 구문으로 질문하지 말아 주세요.
해당 구문이 필요 없는 질문 일 수 있습니다.
컬럼명에 예약어 사용은 좋지 않습니다.(desc)
WITH t AS ( SELECT '1000' code, '2001' year, '2001년 변경사항' desc_ FROM dual UNION ALL SELECT '1000', '2002', '2002년 변경사항' FROM dual ) -- 1. Row_number SELECT code, year, desc_ FROM (SELECT code, year, desc_ , ROW_NUMBER() OVER(PARTITION BY code ORDER BY year DESC) rn FROM t ) WHERE rn = 1 ; -- 2. Keep SELECT code , MAX(year) year , MAX(desc_) KEEP(DENSE_RANK LAST ORDER BY year) desc_ FROM t GROUP BY code ; -- 3. 꼼수? SELECT code , MAX(year) year , SUBSTR(MAX(year || desc_), 5) desc_ FROM t GROUP BY code ;