【问题标题】:Generating increment identifiers for group of sequence values为一组序列值生成增量标识符
【发布时间】:2021-04-30 09:57:05
【问题描述】:

在 SQL 中: 我有一张类似的桌子

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

你能帮忙吗?

【问题讨论】:

标签: sql group-by sql-order-by


【解决方案1】:

使用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。如果这些相同,则没有变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2016-04-18
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多