這個問題在這里已經有了答案: 計算表中值的連續出現次數 (3 個答案) 20 小時前關閉。
我開始學習row_number()和over()磁區,我在這個網站上遇到了一個叫做間隙和島嶼的東西......我試圖理解這一切。
我的資料表:
| 步數 | 地位 |
|---|---|
| 1 | 通過 |
| 2 | 通過 |
| 3 | 通過 |
| 4 | 通過 |
| 5 | 失敗的 |
| 6 | 失敗的 |
| 7 | 失敗的 |
| 8 | 失敗的 |
| 9 | 失敗的 |
| 10 | 通過 |
| 11 | 通過 |
| 12 | 通過 |
我試圖得到的結果:
| 命令 | 地位 | 連續計數 |
|---|---|---|
| 1 | 通過 | 4 |
| 2 | 失敗的 | 5 |
| 3 | 通過 | 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
結果:
| 命令 | 地位 |
|---|---|
| 1 | 失敗的 |
| 2 | 通過 |
uj5u.com熱心網友回復:
下面給出了您想要的結果。
使用您的步驟編號,我們可以創建一個序列,您可以從中減去每個磁區的行號以獲得一個組,然后您可以按該組進行聚合:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374173.html
標籤:sql sql-server 查询语句 窗函数
