bilinkc의 해결책은 잘 작동하지만, 나는 광산을 던져 버릴 것이라고 생각했습니다. 비용은 같지만 더 빠를 수도 있습니다 (또는 느리게 테스트하지는 않았습니다). 차이점은 Row_Number 대신 First_Value를 사용한다는 것입니다. 우리는 첫 번째 가치에만 관심이 있기 때문에 내 생각에는 더 간단합니다.
SELECT ID, Val, Kind FROM
(
SELECT First_Value(ID) OVER (PARTITION BY Val ORDER BY Kind) First, ID, Val, Kind
FROM mytable
)
WHERE ID = First;
테스트 데이터.
--drop table mytable;
create table mytable (ID Number(5) Primary Key, Val Number(5), Kind Number(5));
insert into mytable values (1,1337,2);
insert into mytable values (2,1337,1);
insert into mytable values (3,3,4);
insert into mytable values (4,3,4);
원하는 경우 CTE에 해당합니다.
WITH FirstIDentified AS (
SELECT First_Value(ID) OVER (PARTITION BY Val ORDER BY Kind) First, ID, Val, Kind
FROM mytable
)
SELECT ID, Val, Kind FROM FirstIdentified
WHERE ID = First;