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