Oracle,按排序跳过特定键上的重复行

Oracle, skip duplicate rows on specific key by sort

如何在列表排序时跳过重复记录,例如,
我有 table:

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

这将消除重复记录:

select UNIQUE ...

使用group by:

select EmpID, MIN(Date) as Date, Dept
from t
group by EmpId, Dept
order by EmpID, MIN(Date) DESC;

想法:Partition by 使用 row_number()
复制字段以获得第一行 实施:

select EmpID, Date, Dept, OtherField
from ( select EmpID, Date, Dept, OtherField, 
                row_number() over (partition by empid, dept order by date asc) rwn
       from table_name) t
where rwn = 1;

根据您的 expected result,我假设您需要按 empid, dept 进行分区,并获得 date 的最小值。如果不是,请根据您的目的随意更改查询。

感谢您的澄清。 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