为序列值组生成增量标识符

Generating increment identifiers for group of sequence values

在SQL中: 我有一个 table 类似于这个

ID Name Room
1 John A
2 John A
3 John B
4 John A
5 John C
6 John C
7 Nick C
8 Nick B
9 Nick B
10 Nick A
11 Nick A
12 Nick B

我需要创建一个自动递增的 ID,它遵循两列 NameRoom 的顺序。如果顺序改变,数量会增加。

结果应该是这样的

ID Name Room New ID
1 John A 1
2 John A 1
3 John B 2
4 John A 3
5 John C 4
6 John C 4
7 Nick C 5
8 Nick B 6
9 Nick B 6
10 Nick A 7
11 Nick A 7
12 Nick B 8

你能帮忙吗?

使用 lag() 查看值的变化位置。然后使用累计和:

select t.*,
       sum(case when prev_id = prev_id_2 then 0 else 1 end) over (order by id) as newid
from (select t.*,
             lag(id) over (order by id) as prev_id,
             lag(id) over (partition by name, room order by id) as prev_id_2
      from t
     ) t;

这个工作的方式是根据nameroom查看以前的id和以前的id。如果这些相同,则没有变化。