by 푸른밤 [SQL Query] [2025.02.23 17:07:39]
MAIN 테이블이 있고 DETAIL 이 있을때
WHERE MAIN.ID = DETAIL.ID
AND DETAIL.SEQ = ( SELECT MAX(SEQ) FROM DETAIL WHERE ID = MAIN.ID )
* 예전에 프로젝트 돌때는 그냥 이렇게 MAX 가져와서 주로 썼는데
쿼리 손 놓다가 오랜만에 쿼리 만지는데 다른 더 좋은 방법이 있나요?
분석합수, 순위함수 ROW_NUMBER(), rn = 1 사용합니다.
전체 조인시에는 rn 후 조인
일부 조인시에는 조인 후 rn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | -- 조인 전 rn SELECT ... FROM main_t m , ( SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY seq DESC ) rn , id , seq , ... FROM detail_t ) d WHERE m.id = d.id AND d.rn = 1 ; -- 조인 후 rn SELECT ... FROM ( SELECT m.id , m.... , d.seq , d.... , ROW_NUMBER() OVER(PARTITION BY id ORDER BY seq DESC ) rn FROM main_t m , detail_t d WHERE m.id = d.id ) WHERE rn = 1 ; |