Oracle 表数据去重
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);
最新文章
- NYOJ 1007
- GET command找不到
- 疑似easyui本身bug:easyui时间控件问题,试了几个版本都不行
- Bridge.NET
- bug:无法给图片加边框
- PHPMyAdmin 显示缺mysqli 扩展的解决方法
- Test Tex
- Python多线程(1)——介绍
- C#中实现WebBrowser控件的HTML源代码读写
- Spring_Aop的xml和注解的使用
- 前端之bootstrap模态框
- Javascript、CSS、HTML面试题
- hdu:2036.改革春风吹满地
- 朱晔的互联网架构实践心得S1E1:Pilot
- LNMP平台部署
- dos语法
- File类总结
- Hadoop学习笔记之三:DataNode
- [Linux]Linux下Apache服务器配置
- chown 详解
热门文章
- Tomcat原理 分类: 原理 2015-06-28 19:26 5人阅读 评论(0) 收藏
- 注意:C++中double的表示是有误差的
- Android动画效果translate、scale、alpha、rotate
- hdu 4825 Xor Sum (建树) 2014年百度之星程序设计大赛 - 资格赛 1003
- HDU 2594 (简单KMP) Simpsons’ Hidden Talents
- Java知识点:javac命令
- noip2005提高组题解
- (转)c &; c++内存分配
- Ant编译和部署java web项目
- 【转】让apache支持中文路径或者中文文件