U kunt een analytische functie gebruiken om een enkele orderid
te identificeren voor elk ordernum
- waarschijnlijk min of max, maar er zijn andere functies beschikbaar, dit hangt af van wat u nodig hebt - in een subquery en filter vervolgens om alleen de rijen met de geïdentificeerde ID's te krijgen:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
De inline-weergave haalt alle kolommen en rijen uit uw tabel, maar voegt een extra kolom toe aan het resultaat met de maximale ID voor alle rijen met hetzelfde bestelnummer. (Je kunt daar andere filters of natuurlijk toevoegen).
Het buitenste filter komt dan alleen overeen met de ID voor elk bestelnummer dat overeenkomt met die maximale waarde.
Dit veronderstelt dat orderid
is uniek - tenminste voor een ordernum
maar vermoedelijk wereldwijd. Je zei de orderdate
is altijd hetzelfde voor het ordernum
maar je zou dat in de partitie kunnen opnemen door, zo niet, eventueel de gebruikte analytische functie aan te passen.
(En onderzoek dan hoe en waarom u duplicaten krijgt, en probeer ze te stoppen; verwijder vervolgens de duplicaten uit uw tabel - voorzichtig...)