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最大的那一条数据;两个条件组合到一块就可以删除重复数据并且保留最新数据。
上一篇:
多线程四大经典案例
下一篇:
RabbitMq入门以及使用教程