将唯一的组 ID 分配给具有相同列值且由其他值分隔的行集

Sim*_*ner 1 sql t-sql sql-server

我有一些数据看起来像这样:

uid radius
1   10
2   10
3   10
4   2
5   4
6   10
7   10
8   10
Run Code Online (Sandbox Code Playgroud)

我想要的是每个具有相同半径值的组都有自己唯一的 id,例如:

uid radius GroupdId
1   10     1
2   10     1
3   10     1
4   2      2
5   4      3
6   10     4
7   10     4
8   10     4
Run Code Online (Sandbox Code Playgroud)

我不希望半径为 10 的第二组具有与第一组相同的组 ID(而不是 1)。

我正在研究 SQL Server,但所有数据库的解决方案应该是相同的。

(我以前这样做过,但我一辈子都不记得我是怎么做到的。)

小智 5

尝试这个:

with t as
(
    select
        uid,
        radius,
        lag(radius,1) over (order by uid) as prev_rad
    from
        radtable
)

select
    uid,
    radius,
    sum
    (
        case when radius = coalesce(prev_rad,radius) then 0 else 1 end
    )  
    over 
    (
        order by uid
    ) + 1 as GroupID
from 
    t
Run Code Online (Sandbox Code Playgroud)