如何在列表排序时跳过重复记录,例如,
我有表:
EmpID Date Dept OtherField
1 2017.02.03 11 1
1 2016.02.03 11 2
1 2015.02.03 13 7
1 2014.02.03 21 6
1 2013.02.03 21 12
1 2012.02.03 13 333
我需要得到:
1 2016.02.03 11
1 2015.02.03 13
1 2013.02.03 21
1 2012.02.03 13
最佳答案
感谢您的澄清。 Tabibitosan我相信会满足您的需求:
with sample_data as (select 1 empid, to_date('03/02/2017', 'dd/mm/yyyy') dt, 11 dept, 1 otherfield from dual union all
select 1 empid, to_date('03/02/2016', 'dd/mm/yyyy') dt, 11 dept, 2 otherfield from dual union all
select 1 empid, to_date('03/02/2015', 'dd/mm/yyyy') dt, 13 dept, 7 otherfield from dual union all
select 1 empid, to_date('03/02/2014', 'dd/mm/yyyy') dt, 21 dept, 6 otherfield from dual union all
select 1 empid, to_date('03/02/2013', 'dd/mm/yyyy') dt, 21 dept, 12 otherfield from dual union all
select 1 empid, to_date('03/02/2012', 'dd/mm/yyyy') dt, 13 dept, 333 otherfield from dual)
select empid,
min(dt) dt,
dept
from (select empid,
dt,
dept,
row_number() over (partition by empid order by dt)
- row_number() over (partition by empid, dept order by dt) grp
from sample_data)
group by empid,
dept,
grp
order by empid,
dt desc;
EMPID DT DEPT
---------- ---------- ----------
1 2016.02.03 11
1 2015.02.03 13
1 2013.02.03 21
1 2012.02.03 13
关于sql - Oracle,按排序跳过特定键上的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319542/