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最大的那一条数据;两个条件组合到一块就可以删除重复数据并且保留最新数据。
