MySQL 5.6-删除除具有最高值的副本之外的所有副本的过程?

MySQL 5.6-删除除具有最高值的副本之外的所有副本的过程?,mysql,Mysql,在下表中,我希望删除col_2的所有副本,并只保留值最大的一个 ----------------------- | col_1 | col_2 | ... | ----------------|-----| | 2 | 2 | ... | | 3 | 2 | ... | | 4 | 2 | ... | ---------------------- 将返回: ----------------------- | col_1 | col_2 | ...

在下表中,我希望删除col_2的所有副本,并只保留值最大的一个

-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 2     |  2    | ... |
| 3     |  2    | ... |
| 4     |  2    | ... |
----------------------
将返回:

-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 4     |  2    | ... |
----------------------
然而,不幸的是,我设计的表没有唯一的索引或键


为了实现这一点,我必须执行什么程序?

您可以使用两个group by和一个元组

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
)
join用于仅获取至少有重复行的col_2,not in用于删除行not max(col_1)