使用分区计算连续值 - 间隙和孤岛?
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
我开始学习 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