You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 07:06:04