这里有一些伪数据:
DECLARE @trial TABLE (id int identity, val int)
INSERT INTO @trial (val)
VALUES (1), (3),(8), (10), (8),(3), (1), (10),(8), (1), (3),(10)
select * from @trial order by id
这是我的预期输出:
val duplicateindex
1 0
3 0
8 0
10 0
8 1
3 1
1 1
10 1
8 2
1 2
3 2
10 2
我基本上是想在无界前面的行中找到当前行值的重复数。也可以在副本中计算当前行,所以即使所有副本索引值都偏移了1,也没关系。
有什么想法吗?我使用的是SQL Server 2016。谢谢
您需要COUNT()
窗口函数:
select id, val, count(*) over (partition by val order by id) duplicateindex
from @trial
order by id
您可以从duplicateindex
中减去1
请参阅演示
结果:
> id | val | duplicateindex
> -: | --: | -------------:
> 1 | 1 | 1
> 2 | 3 | 1
> 3 | 8 | 1
> 4 | 10 | 1
> 5 | 8 | 2
> 6 | 3 | 2
> 7 | 1 | 2
> 8 | 10 | 2
> 9 | 8 | 3
> 10 | 1 | 3
> 11 | 3 | 3
> 12 | 10 | 3