이름 값1 값2 값3 값4 버젼
아빠 1 1 1 1 3
아빠 1 2 1 1 2
아빠 1 1 3 1 1
엄마 2 1 4 4 1
엄마 2 3 2 1 2
엄마 2 3 4 3 4
테이블이 만약 이렇게 있을떄요 버젼 칼럼이 제일 높은(아빠3, 엄마4) 것만 이름 기준으로 빼고 싶은데요
결과 :
이름 값1 값2 값3 값4 버젼
아빠 1 1 1 1 3
엄마 2 3 4 3 4
요렇게 뽑아야 되는데요 이게 간단 한거 같은데 막상할려니 안되서요 혹시 간단하게 쿼리로 할 수 있을까요?
WITH T AS (
SELECT '아빠' AS 이름, 1 AS 값1, 1 AS 값2, 1 AS 값3, 1 AS 값4, 3 AS 버전 FROM DUAL
UNION ALL SELECT '아빠', 1, 2, 1, 1, 2 FROM DUAL
UNION ALL SELECT '아빠', 1, 1, 3, 1, 1 FROM DUAL
UNION ALL SELECT '엄마', 2, 1, 4, 4, 1 FROM DUAL
UNION ALL SELECT '엄마', 2, 3, 2, 1, 2 FROM DUAL
UNION ALL SELECT '엄마', 2, 3, 4, 3, 4 FROM DUAL
)
SELECT *
FROM(
SELECT 이름,
값1,
값2,
값3,
값4,
버전,
RANK() OVER(PARTITION BY 이름 ORDER BY 버전 DESC) RK
FROM T)
WHERE RK = 1