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

使用分区统计连续值:Gaps and Islands问题实操求助

Gaps and Islands 连续状态统计问题解法

你当前代码的核心问题是仅按Status字段分组,会把所有状态相同的行合并,自然无法拆分出前后两段独立的Passed分组,也统计不出各段的连续长度。

这类连续区间统计的经典解法是生成「连续相同状态的分组标识」,具体实现SQL如下:

SELECT
    ROW_NUMBER() OVER(ORDER BY MIN([Step Number])) AS [Order],
    Status,
    COUNT(*) AS [Consecutive Counts]
FROM (
    SELECT 
        [Step Number],
        Status,
        -- 生成连续相同状态的唯一分组ID
        [Step Number] - ROW_NUMBER() OVER(PARTITION BY Status ORDER BY [Step Number]) AS grp_id
    FROM Q1
) t
GROUP BY Status, grp_id
ORDER BY [Order]

逻辑说明

  • 内层查询生成的grp_id是核心:相同连续状态的行,全局步长Step Number和同状态分区内的行号都是每次+1,差值固定;一旦状态切换,同状态分区的行号会重新从1开始计数,差值就会发生变化,刚好可以把不同段的相同状态区分开。
  • 外层分组同时按Status和grp_id两个字段分组,就能把两段Passed拆成独立的两个分组,用COUNT(*)直接统计每个分组的行数,就是对应段的连续次数。
  • 排序时取每个分组最小的Step Number作为排序依据,保证生成的Order序号和实际步骤的先后顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:01