oracle - 删除重复的数据(主键不同,保留主键最大的一个)

查看:141
本文介绍了oracle - 删除重复的数据(主键不同,保留主键最大的一个)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

例如: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;

这篇关于oracle - 删除重复的数据(主键不同,保留主键最大的一个)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆