Du kan använda en analytisk funktion för att identifiera en enda orderid
för varje ordernum
- förmodligen antingen min eller max, men andra funktioner är tillgängliga, det beror på vad du behöver - i en underfråga, och filtrera sedan för att bara få raderna med de identifierade ID:n:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
Den infogade vyn hämtar alla kolumner och rader från din tabell, men lägger till ytterligare en kolumn till resultatet som har det maximala ID för alla rader med samma ordernummer. (Du kan lägga till andra filter du vill där, eller kurs).
Det yttre filtret matchar då endast ID:t för varje ordernummer som matchar det maxvärdet.
Detta förutsätter att orderid
är unik - åtminstone för ett ordernum
men förmodligen globalt. Du sa orderdate
är alltid samma för ordernum
men du kan inkludera det i partitionen genom att om inte, eventuellt ändra den analytiska funktionen som används.
(Och undersök sedan hur och varför du får dubbletter, och försök att stoppa dem; ta sedan bort dubbletterna från ditt bord - försiktigt...)