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

标签 sql oracle greatest-n-per-group

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

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/

相关文章:

sql - ORA-12154 : TNS:could not resolve the connect identifier specified on a table

sql - Oracle中的十六进制序列

sql - 需要检索表 A 中的所有记录,并且只检索表 B 中最后更新的一条记录

mysql - PHP和Mysql,避免多次循环查询

sql - 根据字段插入行

sql - 为什么 Postgresql 不允许在 INSERT SELECT 查询中分组集?

sql - 获取sql中最大值的行

c# - 关于 UNION、INTERSECT 和 EXCEPT 的 SqlException

sql - EXECUTE IMMEDIATE PL/SQL block 返回类型

SQL TOP 1 在子查询中使用时返回 null