例如:id date num no name
1 2009-8-1 0002 015 张三
2 2009-8-1 0002 015 张三
3 2009-8-1 0002 015 张三
4 2016-7-6 0008 098 李四
需要删除id为1和2的重复记录,然后保留id为3(重复数据中id最大的那一个)的数据;
操作完成后 有id为3 和 4 的记录。
DELETE FROM table WHERE id IN (
SELECT id FROM (SELECT id FROM table b WHERE (b.date, b.num, b.no) IN (SELECT date, num, no FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AND id NOT IN (SELECT max(id) FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AS tt)
我没测试,不确保上面的 sql
完全正确!
可以先把 DELETE
改成 SELECT *
看看查出来的数据符不符合要求,大概思路就是这个,用 HAVING
;
查询所有符合条件的结果,主键顺序,获取行数,删除前几行