按 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
.
我无法让 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
.