Oracle
 sql >> Database >  >> RDS >> Oracle

Elimina i risultati duplicati in una query di selezione che contiene la colonna CLOB

È possibile utilizzare una funzione analitica per identificare un singolo orderid per ogni ordernum - probabilmente minimo o massimo, ma sono disponibili altre funzioni, dipende da cosa ti serve - in una sottoquery, quindi filtra per ottenere solo le righe con gli ID identificati:

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 visualizzazione in linea ottiene tutte le colonne e le righe dalla tabella, ma aggiunge una colonna aggiuntiva al risultato con l'ID massimo su tutte le righe con lo stesso numero d'ordine. (Puoi aggiungere qualsiasi altro filtro che desideri lì o ovviamente).

Il filtro esterno corrisponde quindi solo all'ID di ogni numero d'ordine che corrisponde a quel valore massimo.

Ciò presuppone che orderid è unico, almeno per un ordernum ma presumibilmente a livello globale. Hai detto orderdate è sempre lo stesso per ordernum ma potresti includerlo nella partizione, in caso contrario, modificando eventualmente la funzione analitica utilizzata.

(E poi indaga su come e perché stai ricevendo duplicati e prova a fermarli; quindi rimuovi i duplicati dalla tua tabella - con attenzione...)