SQL,无界前面有重复计数行

  • 本文关键字:前面 SQL sql sql-server
  • 更新时间 :
  • 英文 :


这里有一些伪数据:

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

最新更新