MySQL删除重复数据保留最新一条

伙伴们经常线上会有一些脏数据我们要进行去重处理,例如我们有一张user表里面有三条数据,现需求按照age进行删除重复数据,每个年龄只能保留一条并且是最新的一条

1.我们先来验证一下重复数据

-- 验证sql
SELECT age,COUNT(*) FROM user GROUP BY age;

18岁有两条,19岁有一条,我们只要删除18岁中id最小的那一条记录即可

2.去重处理

DELETE FROM USER WHERE
    age IN (
        SELECT t1.age FROM (
            SELECT age FROM USER
            GROUP BY age
            HAVING COUNT(age) > 1  )t1 
    )
    AND id NOT IN (
        SELECT t.id FROM(
            SELECT MAX(id) `id`
            FROM USER
            GROUP BY age
            HAVING COUNT(age) > 1)t
    )
;

分析一下这段sql:where有两段条件:第一个是拿出哪些年龄要进行删除的age集合,第二段是不能包含这些重复记录中id最大的那一条数据;两个条件组合到一块就可以删除重复数据并且保留最新数据。

经验分享 程序员 微信小程序 职场和发展