Oracle 中按条件过滤重复记录
在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容易做到,但是在oracle中不支持top关键字,如果实现同样的效果就会小费周折.具体实现方法如下举例:
假如现在有表Test,其中记录
现在业务要求针对id,time相同的记录只保留一条,即处理后得结果为
ORACLE语句为
select t1.*,rowid from test t1 where rowid in (select rowid from test t2 where t1.id=t2.id and t1.time=t2.time and rownum=1 );
或者
对应的oracle语句:
select * from (select * from test order by id, rowid desc) t1 where rowid in (select rowid from (select * from test order by id, rowid desc) t2 where t1.id=t2.id and t1.time =t2.time and rownum=1 );