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

SQL Server如何统计指定字段连续出现的相同数据的次数

SQL Server统计字段值连续出现次数解决方案

这是典型的数据孤岛类计算问题,用SQL Server内置的窗口函数即可快速实现,具体方案如下:


前置假设

我们假设你存储数据的表名为DemoTable,包含两个核心字段:

  • ID:自增有序字段,用来确定行的先后顺序(如果你的业务中连续的判定基于创建时间等其他字段,替换为对应字段即可)
  • NAME:要统计连续出现次数的目标字段

核心实现逻辑

连续出现的相同NAME值可以通过两次行号的差值分组实现:

  1. 对全表按顺序字段排序,生成全局行号
  2. 按NAME分组,组内按顺序字段排序生成分组行号
  3. 同一个连续区间的相同NAME值,两个行号的差值是固定的,按这个差值+NAME分组即可统计连续次数

完整查询代码

WITH CTE AS (
    SELECT 
        ID,
        NAME,
        -- 全局行号,按ID排序保证行顺序符合业务要求
        ROW_NUMBER() OVER (ORDER BY ID) AS GlobalRN,
        -- 按NAME分组后的组内行号
        ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ID) AS GroupRN
    FROM DemoTable
)
SELECT 
    NAME AS 目标值,
    MIN(ID) AS 连续区间起始ID,
    MAX(ID) AS 连续区间结束ID,
    COUNT(*) AS 连续出现次数
FROM CTE
-- 差值相同的行属于同一个连续区间
GROUP BY NAME, (GlobalRN - GroupRN)
-- 可按需增加筛选条件,比如只查Shyam连续出现3次的记录
-- HAVING COUNT(*) = 3 AND NAME = 'Shyam'
ORDER BY MIN(ID)

效果说明

如果你的原始数据如下:

IDNAME
1Ram
2Shyam
3Shyam
4Shyam
5Hari
6Shyam

执行查询后会返回结果:

目标值连续区间起始ID连续区间结束ID连续出现次数
Ram111
Shyam243
Hari551
Shyam661

刚好匹配你示例中ID=2开始Shyam连续出现3次的需求,放开HAVING条件的注释即可直接筛选出这条记录。


优化提示

如果你的ID是无断号的连续自增主键,可以省略全局行号的计算,直接用ID代替GlobalRN,分组条件改为GROUP BY NAME, (ID - GroupRN),查询性能更高。

内容的提问来源于stack exchange,提问作者Nishan Dhungana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:00:00