簡體   English   中英

在 SQL 中計算連續的數值

[英]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

SQLFiddle 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM