prog:oracle_analytic_functions_doubletten
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:oracle_analytic_functions_doubletten [2014/02/17 21:33] – gpipperr | prog:oracle_analytic_functions_doubletten [2016/06/15 11:22] (aktuell) – gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Oracle Analytic Function - Beispiel 3 - Doppelte Daten / Dubletten finden und löschen ===== | ||
+ | |||
+ | Aufgabe: In einer Tabelle befinden sich doppelte Daten, die doppelten Datensätze sollen gefunden und gelöscht werden. | ||
+ | |||
+ | Lösung: pro gleichen Datensatz wird eine fortlaufende Nummer mit der ROW_NUMBER() Funktion vergeben: | ||
+ | <code sql> | ||
+ | |||
+ | -- testdaten aus Beispiel 1 | ||
+ | -- | ||
+ | |||
+ | select id | ||
+ | , rowid | ||
+ | , ROW_NUMBER( ) over( partition by id order by id ) rang | ||
+ | from t | ||
+ | / | ||
+ | |||
+ | ID ROWID RANG | ||
+ | ----- ------------------ ------------ | ||
+ | | ||
+ | 857 AAAj6YAAEAAALSkADH | ||
+ | 857 AAAj6YAAEAAALULADE | ||
+ | | ||
+ | 858 AAAj6YAAEAAALSkADI | ||
+ | 858 AAAj6YAAEAAALULADF | ||
+ | -- gleiche Daten unterscheiden sich nun um die Rang Number | ||
+ | | ||
+ | |||
+ | -- löschen | ||
+ | -- | ||
+ | delete from t | ||
+ | where rowid in( | ||
+ | select rowid from ( select | ||
+ | , ROW_NUMBER() over( partition by id order by id) rang | ||
+ | from t ) | ||
+ | where rang > 1 ) | ||
+ | / | ||
+ | |||
+ | 56033 Zeilen wurden gelöscht. | ||
+ | |||
+ | </ | ||
+ | |||
+ | Mehr Beispiele: [[prog: | ||
+ | |||
prog/oracle_analytic_functions_doubletten.txt · Zuletzt geändert: 2016/06/15 11:22 von gpipperr