Oracle
 sql >> Base de données >  >> RDS >> Oracle

Éliminer les résultats en double dans une requête de sélection contenant une colonne CLOB

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...)