PARTITION BY 질문드립니다. 0 2 967

by SQL모험가 [Oracle 기초] [2022.02.21 14:06:43]


운영 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년 변경사항

요렇게 띄울려고 합니다.

수정할 부분 지적 부탁드립니다.

by 마농 [2022.02.21 14:37:54]

질문하실 때 특정 구문으로 질문하지 말아 주세요.
해당 구문이 필요 없는 질문 일 수 있습니다.
컬럼명에 예약어 사용은 좋지 않습니다.(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
;

 


by SQL모험가 [2022.02.22 09:19:40]

와 감사합니다;

예제문까지 해주시고 ㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입