按 ID 进行密集排名分组

Dense Rank grouping by IDs

我无法让 Oracle 中的 DENSE_RANK() 函数按我希望的方式工作。首先,我的数据集:

ID      DATE
1234    01-OCT-2020
1234    01-OCT-2021
1234    01-OCT-2022
2345    01-APR-2020
2345    01-APR-2021
2345    01-APR-2022

我正在尝试使用密集排名函数 return 结果,其中包含基于 DATE 字段的序列号,并按 ID 分组。我希望数据如何 return:

ID      DATE           SEQ
1234    01-OCT-2020    1
1234    01-OCT-2021    2
1234    01-OCT-2022    3
2345    01-APR-2020    1
2345    01-APR-2021    2
2345    01-APR-2022    3

我目前的查询:

 SELECT ID, DATE, DENSE_RANK() Over (order by ID, DATE asc) as SEQ

但是,这个 return 是错误的,因为序列号将变为 6(就像它无视我基于某个 ID 中的 DATE 字段进行排序的意图)。如果有人对如何使这项工作有任何见解,我们将不胜感激!

你想要row_number():

select id, date, row_number() over (partition by id order by date) as seq

如果您想让重复项具有相同的想法,您实际上也可以使用 dense_rank()。关键思想是 partition by.