sql - SQL,无界之前的重复计数行
问题描述
这是一些虚拟数据:
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
我基本上是在尝试在无界之前的行中查找当前行值的重复数。可以在副本中计算当前行,所以即使所有的 duplicateindex 值都移动了 1,这也很好。
请问有什么想法吗?我正在使用 SQL Server 2016。谢谢。
解决方案
您需要COUNT()
窗口功能:
select id, val, count(*) over (partition by val order by id) duplicateindex
from @trial
order by id
您可以从 中减去 1 duplicateindex
。
请参阅演示。
结果:
> 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
推荐阅读
- javascript - 如何使用 javascript 获取所选文本的当前字体大小?
- r - 如何在 ggord 图中重命名(和删除)轴和图例?
- macos - 为什么我的主机文件不包含我经常访问的网站的 IP 地址?
- python-3.x - 从数据框中为列表中的项目打印相应的行 - Python
- php - ksort in multidimensional array doesn't work
- android - 如何在按钮单击时在数组列表中向后移动?
- android - Firebase 中的用户注册问题
- python-3.x - 无法安装软件包 - 在 /tmp/pip-install-yzeutv5u/keyring/ 中出现错误代码 1 失败
- android - 如何在卡片视图中设置不同的布局?
- python - __init__() 接受 1 个位置参数,但给出了 2 个。响应 = Wrapped_callback(request, *callback_args, **callback_kwargs)