2009. 8. 6.

[ORACLE] MAX 행의 다른 컬럼 조회하기 KEEP(DENSE_RANK FIRST ORDER BY)

MAX() 행의 다른 컬럼값을 가져와야 할 경우 보통 서브질의를 생각할수 있습니다.
그런데 특정조건이 걸리게 되면... 다음과 같이 특정값을 직접 지정해 주어야 할 수 밖에 없습니다.

SELECT A.aaa
    ,A.bbb
    ,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
        FROM B
      WHERE ddd='특정값')) AS ccc
   FROM TABLE_A A

그리하여 다음과 같은 쿼리를 생각하게 되고..

SELECT A.aaa
    ,A.bbb
    ,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
        FROM B
      WHERE ddd=A.ddd)) AS ccc
   FROM TABLE_A A

결과는 당연히.. 서브의 서브에서는 참조할 수 없어서 에러가 납니다.(아흑 T-T)

하지만 오라클은 이러한 고민을 해결해주는 KEEP(DENSE_RANK FIRST ORDER BY ~) 함수가 있습니다!! (^0^)b

SELECT A.aaa
    ,A.bbb
    ,(SELECT MAX(ccc) KEEP(DENSE_RANK FIRST ORDER BY base_date DESC)
         FROM B
       WHERE ddd=A.ddd) AS ccc
   FROM TABLE_A A

Categories: , , ,

0 개의 댓글:

댓글 쓰기

Copyright © 화랑천's 소소하기

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes 위로