운영 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
;
와 감사합니다;
예제문까지 해주시고 ㅠ