Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Beseitigen Sie doppelte Ergebnisse in einer Auswahlabfrage, die eine CLOB-Spalte enthält

Sie könnten eine Analysefunktion verwenden, um eine einzelne orderid zu identifizieren für jede ordernum - wahrscheinlich entweder min oder max, aber andere Funktionen sind verfügbar, es hängt davon ab, was Sie brauchen - in einer Unterabfrage und dann filtern, um nur die Zeilen mit den identifizierten IDs zu erhalten:

select orderid, ordernum, orderdate, orderxml
from (
  select orderid, ordernum, orderdate, orderxml,
    max(orderid) over (partition by ordernum) as maxorderid
  from orders
)
where orderid = maxorderid;

Die Inline-Ansicht ruft alle Spalten und Zeilen aus Ihrer Tabelle ab, fügt ihrem Ergebnis jedoch eine zusätzliche Spalte hinzu, die über alle Zeilen mit derselben Bestellnummer hinweg die maximale ID aufweist. (Sie können dort beliebige andere Filter hinzufügen oder natürlich).

Der äußere Filter passt dann nur die ID für jede Bestellnummer an, die diesem Maximalwert entspricht.

Dies setzt voraus, dass orderid ist eindeutig - zumindest für eine ordernum aber vermutlich weltweit. Sie haben das orderdate genannt ist für die ordernum immer gleich Sie könnten dies jedoch in die Partition aufnehmen, indem Sie andernfalls möglicherweise die verwendete Analysefunktion ändern.

(Und dann untersuchen Sie, wie und warum Sie Duplikate erhalten, und versuchen Sie, sie zu stoppen; entfernen Sie dann die Duplikate von Ihrem Tisch - vorsichtig ...)