วิธีแก้ปัญหาของ bilinkc ทำงานได้ดี แต่ฉันคิดว่าฉันจะเหวี่ยงออกไปด้วย มีค่าใช้จ่ายเท่ากัน แต่อาจเร็วกว่า (หรือช้ากว่านั้นฉันยังไม่ได้ทดสอบ) ความแตกต่างคือมันใช้ First_Value แทน Row_Number เนื่องจากเราให้ความสนใจในคุณค่าแรกเท่านั้นในใจของฉันมันจึงตรงไปตรงมามากกว่า
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;