使用分区计算连续值 - 间隙和孤岛?

Counting consecutive values using partitioning - gaps and islands?

我开始学习 row_number()over() 分区,并且我 运行 进入了这个网站上名为 Gaps and Islands 的东西...我正在努力理解全部。

我的数据table:

Step Number Status
1 Passed
2 Passed
3 Passed
4 Passed
5 Failed
6 Failed
7 Failed
8 Failed
9 Failed
10 Passed
11 Passed
12 Passed

我想要得到的结果:

Order Status Consecutive Counts
1 Passed 4
2 Failed 5
3 Passed 3

这是我所了解的。第一个“通过”没有出现在记录集中,我找不到在哪里放置 COUNT() 或任何函数来获取分区中的行数。

SELECT
    ROW_NUMBER() OVER(ORDER BY Status) AS 'Order', Status
FROM (
    SELECT *, Steppy = row_number() over (partition by [Status] order by [StepNumber] desc)
    FROM Q1
) A
GROUP BY Status

结果:

Order Status
1 Failed
2 Passed

以下是您想要的结果。

使用您的步数,我们可以创建一个序列,您可以从中减去每个 分区 的行号,得到一个 , 那么你可以按这个组来聚合:

with g as (
  select StepNumber, status, 
    Row_Number() over(order by StepNumber) 
    - Row_Number() over(partition by status order by StepNumber) grp
  from t
)
select Row_Number() over(order by grp) [Order],
Status, Count(*) [consecutive counts]
from g
group by Status, grp