본문 바로가기
TechNical/Oracle

최근 날짜를 가진 목록 조회하기

by 강멍멍이 2025. 3. 30.
반응형

최근 날짜를 가진 목록을 조회하려면 MAX 날짜를 가져와야 한다.
DATE1에 인덱스가 있다면 아래와 같이 하면 되지만
 
SELECT *
  FROM TABLE1
WHERE (KEY1, DATE1) IN (SELECT KEY1, MAX(DATE1)
                                                 FROM TABLE1
                                               WHERE COND1 = :cond1
                                               GROUP BY KEY1)
 
인덱스가 없으면 상당히 속도가 느리다.
그럴때는 RANK 로 가져오는게 성능이 더 좋다.
 
SELECT *
   FROM (
                SELECT KEY1
                             , RANK() OVER(PARTITION BY KEY1 ORDER BY DATE1 DESC) AS RK
                   FROM TABLE1
                 WHERE COND1 = :cond1
              )
 WHERE RK = 1
 
뭔가 더 없어 보이고 더 느릴 것 같이 생겼는데 오묘하다.. 
 

반응형

댓글