码迷,mamicode.com
首页 > 数据库 > 详细

Oracle 表数据去重

时间:2015-03-10 19:13:01      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

  Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题。今天我们要说的有两种方法。

一.根据rowid来去重。

  我们都知道在oracle数据库表中,每条记录都有唯一的rowid来标识,这就可以做我们去重的查询条件

我们现有一张TEST表,技术分享,首先若我们要按ID,VALUE进行去重的话,

DELETE TEST A
WHERE NOT EXISTS (SELECT 1
FROM (SELECT ID, VALUE, MAX(ROWID) MAXROWID
FROM TEST
GROUP BY ID, VALUE) T
WHERE A.ROWID = T.MAXROWID);

同样的,要是只根据ID去重的话,

DELETE TEST A
WHERE NOT EXISTS (SELECT 1
FROM (SELECT ID, MAX(ROWID) MAXROWID
FROM TEST
GROUP BY ID) T
WHERE A.ROWID = T.MAXROWID);

二.采用ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)开窗函数进行去重

这是一个开窗函数,ROW_NUMBER() 从1开始,为每一条分组记录返回一个数字。

技术分享

如果我们想根据ID来去重,相同ID的取value值最小的那个,根据ROW_NUMBER()我们可以得到,

技术分享

此时,我们根据ROW_NUMBER()生产的标识来取对应的值就可以了

DELETE FROM AAAA T1
WHERE ROWID NOT IN (SELECT RID
FROM (SELECT T1,*,ROWID AS RID,
ROW_NUMBER() OVER(PARTITION BY T1.ID ORDER BY T1.VALUE) AS RN
FROM AAAA T1)
WHERE RN = 1);

Oracle 表数据去重

标签:

原文地址:http://www.cnblogs.com/longjshz/p/4326533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!