利用ROW_NUMBER()函数实现按条件分组排序


背景:
我想删除表中的重复数据,但是我又想以某些条件进行排序,然后再删除,用普通的GROUP BY相对麻烦,可以尝试这个方法。

数据准备:
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600.00, 300.00, 30);

insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7500, 'ALLEN', 'SALESMAN', 7698, to_date('01-02-1980', 'dd-mm-yyyy'), 1600.00, 300.00, 30);



数据过滤:
select *
  from (select /*+ parallel(t,8)*/
         row_number() over(partition by t.ename order by t.hiredate desc) rn,
         t.empno,
         t.ename,
         t.hiredate,
         rowid row_id
          from emp t)
 where rn >= 2;

猜你喜欢

转载自yhef.iteye.com/blog/1610258