반응형
최근 날짜를 가진 목록을 조회하려면 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
뭔가 더 없어 보이고 더 느릴 것 같이 생겼는데 오묘하다..
반응형
댓글