Du kan bruge en analytisk funktion til at identificere en enkelt orderid
for hvert ordernum
- sandsynligvis enten min eller max, men andre funktioner er tilgængelige, det afhænger af, hvad du har brug for - i en underforespørgsel, og filtrer derefter for kun at få rækkerne med de identificerede ID'er:
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 indbyggede visning henter alle kolonner og rækker fra din tabel, men tilføjer en ekstra kolonne til resultatet, der har det maksimale ID på tværs af alle rækker med det samme ordrenummer. (Du kan tilføje andre filtre, du ønsker derind, eller kursus).
Det ydre filter matcher så kun ID'et for hvert ordrenummer, der matcher den maksimale værdi.
Dette forudsætter, at orderid
er unik - i hvert fald for et ordernum
men formentlig globalt. Du sagde orderdate
er altid den samme for ordernum
men du kan inkludere det i partitionen ved, hvis ikke, muligvis at ændre den anvendte analytiske funktion.
(Og så undersøg hvordan og hvorfor du får dubletter, og prøv at stoppe dem; fjern derefter dubletterne fra din tabel - forsigtigt...)