我在对 Oracle 中的某些列进行排名时遇到了一些问题。我有两列需要排名——一个组 ID 和一个日期。
我想以两种方式对表格进行分组:
- 按 DATETIME (RANK_1) 对每个 GROUP_ID 中的记录进行排名
- 按 DATETIME、GROUP_ID (RANK_2) 对 GROUP_ID 进行排名
它应该如下所示:
GROUP_ID | DATE | RANK_1 | RANK_2
----------|------------|-----------|----------
2 | 1/1/2012 | 1 | 1
2 | 1/2/2012 | 2 | 1
2 | 1/4/2012 | 3 | 1
3 | 1/1/2012 | 1 | 2
1 | 1/3/2012 | 1 | 3
我已经能够做到前者,但无法弄清楚后者。
SELECT group_id,
datetime,
ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY datetime) AS rn,
DENSE_RANK() OVER (ORDER BY group_id) AS rn2
FROM table_1
ORDER BY group_id;
这错误地排序了 RANK_2 字段:
GROUP_ID | DATE | RANK_1 | RANK_2
----------|------------|-----------|----------
1 | 1/3/2012 | 1 | 1
2 | 1/1/2012 | 1 | 2
2 | 1/2/2012 | 2 | 2
2 | 1/4/2012 | 3 | 2
3 | 1/1/2012 | 1 | 3