Oracle でいくつかの列をランク付けする際に問題が発生しています。ランク付けする必要がある列が 2 つあります。グループ ID と日付です。
テーブルを次の 2 つの方法でグループ化します。
- 各 GROUP_ID のレコードを DATETIME (RANK_1) でランク付けします
- GROUP_ID を DATETIME、GROUP_ID (RANK_2) でランク付けします。
次のようになります。
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