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:

-- testdaten aus Beispiel 1 
--
 
SELECT id
     , rowid
     , ROW_NUMBER( ) OVER( partition BY id ORDER BY id ) rang 
 FROM t
/
 
   ID ROWID                      RANG
----- ------------------ ------------
 
  857 AAAj6YAAEAAALSkADH            1
  857 AAAj6YAAEAAALULADE            2
 
  858 AAAj6YAAEAAALSkADI            1
  858 AAAj6YAAEAAALULADF            2
-- gleiche Daten unterscheiden sich nun um die Rang Number
 
 
-- löschen
--
DELETE FROM t
      WHERE rowid IN( 
        SELECT rowid FROM ( SELECT  rowid
                                  , ROW_NUMBER() OVER( partition BY id ORDER BY id) rang
                            FROM t )
        WHERE rang > 1 )
/        
 
56033 Zeilen wurden gelöscht.

Mehr Beispiele: Oracle Analytic Functions im praktischen Einsatz