在 SQL Server 中统计 rec_num 的连续重复次数
解决方法
你前面的两个 ROW_NUMBER 已经可以用来识别连续区间:
rn1:每个nom内的整体序号。rn2:每个nom、rec_num内的序号。- 对于一段连续相同的
rec_num,rn1和rn2都每行增加1,因此rn1 - rn2保持不变。
最后不要用 ROW_NUMBER,而要用 COUNT(*) 计算整个连续区间的行数。另外,分区条件中需要加上 rec_num,避免不同 rec_num 的区间恰好得到相同的差值。
WITH cte AS ( SELECT diff, nom, rec_num, ROW_NUMBER() OVER ( PARTITION BY nom ORDER BY diff DESC ) AS rn1, ROW_NUMBER() OVER ( PARTITION BY nom, rec_num ORDER BY diff DESC ) AS rn2 FROM t ) SELECT diff, nom, rec_num, COUNT(*) OVER ( PARTITION BY nom, rec_num, rn1 - rn2 ) AS con_repeats FROM cte ORDER BY nom, diff DESC;
最终答案
核心是将最后一步从:
ROW_NUMBER() OVER (PARTITION BY nom, rn1 - rn2 ...)
改为:
COUNT(*) OVER (PARTITION BY nom, rec_num, rn1 - rn2)
这样同一连续重复区间内的每一行,都会显示该区间的总重复次数。
内容的提问来源于stack exchange,提问作者qtsar
相关产品推荐
相关产品推荐

