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;