Oracle 去重

Oracle 删除重复数据只留一条

查询及删除重复记录的SQL语句

-- 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)

-- 例:
select * from orders_tmp2 where cust_nbr in
(select cust_nbr from orders_tmp2 group by cust_nbr having count(cust_nbr) > 1)

-- 2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有 rowid 最小的记录
DELETE from 表 WHERE (id) IN
    ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1)
    AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);

-- 3、查找表中多余的重复记录(多个字段)
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)

-- 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from 表 a where (a.Id,a.seq) in
    (select Id,seq from 表 group by Id,seq having count(*) > 1)
    and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

-- 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
 select * from 表 a where (a.Id,a.seq) in
    (select Id,seq from 表 group by Id,seq having count(*) > 1)
    and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

-- 去重, cust_nbr,month 为主键, cust_nbr 相同,只留下month最大的记录
delete from orders_tmp2 where (cust_nbr, month) not in
(select cust_nbr,
max(month) keep(dense_rank first order by month desc) max_month
from orders_tmp2 tb group by cust_nbr)
时间: 2024-10-25 04:07:15

Oracle 去重的相关文章

oracle去重:综合了别人的记录

oracle去重:综合了别人的记录,大致有以下两种看起来顺眼. 1.delete from t where rowid not in (select min(rowid) from t group by 去重字段); 举个栗子: --去重 delete from PTW_I_METHOD_DEFINE_TEMP where id not in (select min(id) from PTW_I_METHOD_DEFINE_TEMP group by no); 2.(注意:distinct是记录

oracle去重等基础问题

--去重查询方法一:根据id select * from sxe where id in(select min(id) from sxe group by username) order by id asc;--去重查询方法二:根据rownumselect * from (select s.*,rownum rn from sxe s ) x where x.rn in (select min(rownum) from sxe group by username) order by id asc

转转转--oracle 去重并按时间排序取第一条

select t.* from (select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 desc) rw from 表 a) t where t.rw = 1 row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行

oracle去重

create table tmp_table3 as (SELECT seqno FROM (SELECT t.seqno,ROWID, ROW_NUMBER() OVER(PARTITION BY title, uin ORDER BY createtime) DUP FROM calendar_info t where isdelflag = 0 and specialtype = 1 --and uin = '30647' and comefrom = 12) WHERE DUP > 1)

Oracle 表数据去重

Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题.今天我们要说的有两种方法. 一.根据rowid来去重. 我们都知道在oracle数据库表中,每条记录都有唯一的rowid来标识,这就可以做我们去重的查询条件 我们现有一张TEST表,,首先若我们要按ID,VALUE进行去重的话, DELETE TEST A WHERE NOT EXISTS (SELECT 1 FROM (SELECT ID, VA

oracle如何实现去重和分页

一:oracle实现去重: user数据表: 分两步:1.查询重复数据  2.删除重复数据 1.查询重复数据:在oracle中实现查询重复数据,可以借助于rowid这个伪列.oracle中每个表物理上都存在一个rowid的列,这个列是每行数据在oracle中唯一标识,每个表的主键可以保证数据在本表中不重复,rowid可以保证该条数据在数据库中的所有表中都不重复. --查询重复数据 用户名和密码都相同的数据叫重复数据 select u1.*,rowid from users u1 where ex

Oracle 单列去重 显示单行所有列数据

问题:test_table 表中有 a,b,c 三个字段,求根据字段a 去除重复数据,得到去重后的整行数据 根据mysql的经验尝试以下方法均失败 1.使用 distinct 关键字 (oracle查询数据中,不允许非 distinct 标注字段 ) select count(distinct a),a,b,c from test_table; 2.使用 group by (oracle查询数据中不允许非分组字段) select a,b,c from test_table group by a;

Oracle数据库,模糊查询、去重查询

分组去重查询,并执行某一个函数 :select  分组字段,聚合函数 from 表名 where 条件 group by分组字段 select  分组字段,聚合函数 from 表名 where 条件 group by分组字段 having过滤条件 例:select cno, avg(degree) from score group by cno having count(sno)>=5: 模糊查询  : like select * from 表名 where 字段 like   '字符串%'  

Oracle的去重函数 distinct

原贴地址:http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html#m0 SQL中distinct的用法 1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select distinct name from