2016-11-29 3 views
1

Ich habe eine Tabelle t1, die die folgend ähnelt:Wie entfernen doppelte Datensätze aus der Tabelle mit MAX-Funktion

 
first_name last_name row_number 
Bob   Smith  1 
Mike  Jones  2 
Mike  Jones  3 
Jessie  Lee   4 
Bob   Smith  5 
Jessie  Lee   6 

und ich mag Zeilen aus der Tabelle löschen, so dass jeder Name nur einmal aufgeführt wird und wird von seiner MAX-Zeilennummer begleitet.

Als solche ich die Ausgabe meiner Abfrage sein möchte:

 
first_name last_name row_number 
Mike  Jones  3 
Bob   Smith  5 
Jessie  Lee   6 

Die Abfrage, die ich mit aufkam ist:

 
DELETE FROM table t1 
WHERE t1.row_number != 
(SELECT MAX(row_number) FROM table t2 
WHERE t1.first_name = t2.first_name and t2.last_name = t2.last_name); 

Diese Abfrage funktioniert nicht (es löscht einige Zeilen aber nicht die richtigen), aber ich verstehe nicht, was ich falsch mache. Wie kann ich diese Abfrage korrigieren, um die richtigen Zeilen zu löschen?

+0

Sie sollten mit row_number nicht, aber Rowid. –

Antwort

0

Sie haben einen Tippfehler: "und t2.last_name = t2.last_name" sollte wohl sein: "und t1.last_name = t2.last_name"

Verwandte Themen