Vous pouvez utiliser une fonction analytique pour identifier un seul orderid
pour chaque ordernum
- probablement min ou max, mais d'autres fonctions sont disponibles, cela dépend de ce dont vous avez besoin - dans une sous-requête, puis filtrez pour n'obtenir que les lignes avec les identifiants identifiés :
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
La vue en ligne obtient toutes les colonnes et lignes de votre table, mais ajoute une colonne supplémentaire à son résultat qui a l'ID maximum sur toutes les lignes avec le même numéro de commande. (Vous pouvez ajouter tous les autres filtres que vous voulez là-dedans, ou bien sûr).
Le filtre externe correspond alors uniquement à l'ID de chaque numéro de commande correspondant à cette valeur maximale.
Cela suppose que orderid
est unique - au moins pour un ordernum
mais probablement à l'échelle mondiale. Vous avez dit la orderdate
est toujours le même pour le ordernum
mais vous pouvez l'inclure dans la partition en modifiant éventuellement la fonction analytique utilisée.
(Et ensuite, examinez comment et pourquoi vous obtenez des doublons, et essayez de les arrêter ; puis supprimez les doublons de votre table - avec précaution...)