2017-06-07 3 views
0

Ich habe die folgende Tabelle, wo ich alle Duplikate von col_2 entfernen möchte, und nur die mit dem größten Wert behalten.MySQL 5.6 - Verfahren zum Entfernen aller Duplikate bis auf einen mit dem höchsten Wert?

----------------------- 
| col_1 | col_2 | ... | 
----------------|-----| 
| 2  | 2 | ... | 
| 3  | 2 | ... | 
| 4  | 2 | ... | 
---------------------- 

Würde zurück:

----------------------- 
| col_1 | col_2 | ... | 
----------------|-----| 
| 4  | 2 | ... | 
---------------------- 

Jedoch habe ich entworfen leider meinen Tisch, so dass es keine eindeutigen Indizes oder Schlüssel sind.

Was ist die Prozedur, die ich machen muss, um dies zu erreichen?

Antwort

0

Sie ein paar Gruppe durch und ein Tupel

delete from my_table a 
inner join (
    select col_2 
    from my_table 
    group by col_2 
    having count(*)> 1 
) t on a.col_2 = t.col_2 
where (a.col_2, a.col_1) not in (
    select col_2, max(col_1) 
    from my_table 
    group by col_2 
    having count(*) > 1 
) 

die registrieren zu erhalten, ist nur die col_2 mit mindestens einem duplizierten Reihe und die nicht in ist für löschen Sie die Zeile nicht max (col_1) verwenden könnte

Verwandte Themen