oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据相关的知识,希望对你有一定的参考价值。
表 tt_test
id md
10010 22
10010 23
10010 55
33333 12
222222 13
是保留重复数据中MD的值最小的那行数据 意思是这行数据不删除
where id in (select id from tt_test group by id having count(md)>1) and md not in (select min(md) md from tt_test group by id)
解释:
id in (select id from tt_test group by id having count(md)>1) 表示id有重复的记录
md not in (select min(md) md from tt_test group by id) 表示不是md最小的记录 参考技术A delete tt_test where rowid in (
select rowid
(select
row_number()over(partition by id order by md) rn,rowid from tt_test)
where rn > 1
)追问
运行了下,但是在第二个select处报错来着
追答row_number() over 中间有空格
参考技术B delete from tt_test where id in(select id from tt_test group by id having min(md)!=max(md)) and md not in(select min(md) from tt_test group by id having min(md)!=max(md)) 参考技术C delete from XXX where id not in (select id from (select id,row_number() over (partition by id order by md) "row" from XXX) where "row"=1) 参考技术D rownumber rank追问。。哥们,能具体说下吗?
第5个回答 2012-07-19 4Oracle数据去重
一、完全重复数据去重方法
具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表。
对于表中完全重复数据去重,可以采用以下SQL语句。
--Code
CREATE TABLE "#temp" AS (SELECTDISTINCT * FROM 表名); --创建临时表,并把DISTINCT 去重后的数据插入到临时表中
truncate TABLE 表名; --清空原表数据
INSERT INTO 表名 (SELECT * FROM "#temp"); --将临时表数据插入到原表中
DROP TABLE "#temp"; --删除临时表
二、部分数据去重方法
我们可以考虑建立临时表,将需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。
createtable 临时表 as select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUPBY a.字段1,a.字段2; deletefrom 表名 a where a.rowid != ( select b.dataid from 临时表 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ); commit;
实例:思路
1、根据上面的思路操作
2、删除正式表,然后把临时表数据插入到正式表中
-- 根据MAX(a.rowid)筛选重复的数据,获得一张数据不重复的临时表
create table 临时表 as select a.ip,a.port,MAX(a.ROWID) dataid from ipresult a GROUP BY a.ip,a.port;
-- 删除正式表中重复数据,只保留最新的一条数据 delete from ipresult a where a.rowid != ( select b.dataid from 临时表 b where a.ip = b.ip and a.port= b.port );
--删除临时表并提交 drop table 临时表; commit;
‘
引用资料:
以上是关于oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据的主要内容,如果未能解决你的问题,请参考以下文章