背景:
我想删除表中的重复数据,但是我又想以某些条件进行排序,然后再删除,用普通的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;