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 uniquement pour obtenir les lignes avec les ID 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 les lignes de votre table, mais ajoute une colonne supplémentaire à son résultat qui a l'ID maximale sur toutes les lignes avec le même numéro de commande. (Vous pouvez ajouter tous les autres filtres que vous voulez, ou bien sûr).
Le filtre externe ne correspond alors qu'à l'ID pour chaque numéro de commande correspondant à cette valeur maximale.
Ceci suppose que orderid
est unique - au moins pour un ordernum
mais vraisemblablement globalement. Vous avez dit que le orderdate
est toujours le même pour le ordernum
mais vous pouvez l'inclure dans la partition si ce n'est pas le cas, en modifiant éventuellement la fonction analytique utilisée.
(Et puis enquêtez comment et pourquoi vous obtenez des doublons, et essayer de les arrêter, puis supprimer les doublons de votre table - avec soin ...)
Pourquoi avez-vous 'double ordernum' dans votre table? Ont-ils les mêmes valeurs pour 'orderdate' et' orderxml'? Si non, quelles valeurs devez-vous sélectionner pour ces colonnes? – mathguy
Oui, ils ont les mêmes valeurs pour orderdate et orderxml. – user576914