在 Oracle sql 中按年份对 table 条记录进行排名

Ranking a table of records by year in Oracle sql

我在 Oracle DBA 中有 table 条记录,其中有两列

Employee Id  and year
12343.           2016
12343.           2017
12343.           2018
12343.           2019

我想将其排名为 2019 年排名 3,2018 年排名 2 和 2107 排名 1.i 只需要员工三年的数据。(2019、2018、2017)..所有其他人应该流出 我通过使用密集排名实现了这一目标。

如果员工的最大年份是 2018 年,那么我需要帮助的地方应该是 3,2017 年应该是 2。例如

Emoyee I'd.     Year.  Rank
2000.            2017.  2
2000.            2018.  3

同样,如果另一个员工的最大年份是 2017 年,他应该排在第 3 位

所以基本上该员工最近的所有年份都应该以 3 开头。

实现此 uisng Oracle sql 的任何帮助都会派上用场。

提前致谢

也许是这样的?

with
  test_data (employee, yr) as (
    select 1001, 2015 from dual union all
    select 1001, 2016 from dual union all
    select 1001, 2017 from dual union all
    select 1001, 2018 from dual union all
    select 1001, 2019 from dual union all
    select 1003, 2018 from dual union all
    select 1003, 2019 from dual union all
    select 1003, 2020 from dual union all
    select 1008, 2015 from dual union all
    select 1008, 2016 from dual union all
    select 1008, 2017 from dual
  )
select employee, yr, 
       4 - rank() over (partition by employee order by yr desc) as rnk
from   test_data
where  yr in (2017, 2018, 2019)
order  by employee, yr desc    --   or whatever is needed
;

  EMPLOYEE         YR        RNK
---------- ---------- ----------
      1001       2019          3
      1001       2018          2
      1001       2017          1
      1003       2019          3
      1003       2018          2
      1008       2017          3

请注意,with 子句不是解决方案的一部分;我将它包含在那里以生成测试数据。删除它,并使用您实际的 table 和列名称。