[英]Count Consecutive Numeric values in SQL
關於這個場景已經有很多現有的問題,但是我無法在我的場景中復制答案。
我有以下示例數據集:
ID Number | Values
754321 0
754321 0
754321 0
754321 0
754321 1
754321 0
754321 1
754321 0
754321 2
754321 0
754329 3
754329 4
754329 5
754329 6
754329 7
754329 8
754329 9
我想要輸出ID Number
的 SQL 查詢,該ID Number
的值連續出現的次數為“0”。 因此,對於上表,我希望得到如下輸出:
ID Number Count of Consecutive 0 Values
754321 4
這是間隙和島嶼問題的一種形式。 您可以通過計算它之前的非零值的數量來為每個0
分配一個組。 然后聚合。
但是,SQL 表表示無序集。 除非列指定了排序,否則沒有排序。 讓我假設你有一個。 然后:
select count(*)
from (select t.*,
sum(values <> 0) over (partition by idnumber order by <ordering col>) as grp
from t
) t
where values = 0
group by idnumber, grp;
如果您運行的 MySQL 版本不支持窗口函數,則可以使用變量實現此功能:
SELECT `ID Number`, MAX(cnt) AS `Max Consecutive 0 Values`
FROM (SELECT `ID Number`, SUM(`Values` = 0) AS cnt
FROM (SELECT `ID Number`, `Values`,
@cnz:= CASE WHEN `Values` != 0 THEN @cnz + 1
ELSE @cnz
END AS cnz
FROM data
CROSS JOIN (SELECT @cnz := 0) init
ORDER BY date
) c
GROUP BY `ID Number`, cnz) s
GROUP BY `ID Number`
輸出
ID Number Max Consecutive 0 Values
754321 4
754329 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.