首页 > 解决方案 > 在 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我想要输出“0”值连续出现次数的SQL 查询。因此,对于上表,我希望得到如下输出:

ID Number  Count of Consecutive 0 Values
754321     4 

标签: mysqlsqlgaps-and-islands

解决方案


如果您运行的 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 上的演示


推荐阅读