计算mysql中的连续行数

计算mysql中的连续行数,mysql,sql,Mysql,Sql,我想在这里找到连续1出现3次或更多时间的ID。因此,在输出中,我将只看到5,6,7,8。有人能帮我解决这个问题吗 +------+----------+ | id | diff_chk | +------+----------+ | 2 | 1 | | 3 | 2 | | 5 | 1 | | 6 | 1 | | 7 | 1 | | 8 | 1 | | 9 |

我想在这里找到连续1出现3次或更多时间的ID。因此,在输出中,我将只看到5,6,7,8。有人能帮我解决这个问题吗

+------+----------+
| id   | diff_chk |
+------+----------+
|    2 |        1 |
|    3 |        2 |
|    5 |        1 |
|    6 |        1 |
|    7 |        1 |
|    8 |        1 |
|    9 |        3 |
|   12 |        1 |
|   13 |        1 |
+------+----------
预期产出

id
5
6
7
8
我尝试使用的查询没有按照下面的逻辑获取正确的结果

 select id,COUNT(1) OVER( PARTITION BY diff_chk ORDER BY id ) as w_func from table1 where w_func!=1
这就是问题所在。请尝试以下内容,下面是MySql 8.0中的示例

输出:

*-----*
| id  |
*-----*
| 5   |
| 6   |
| 7   |
| 8   |
*-----*

假设MySQL版本为8+您可以使用

具有 cte1作为选择id, 区别, id-按id组编号排序的订单上的行编号 从测试 其中diff_chk=1, cte2作为选择id, 区别, 按组计数*分区上的计数组计数 来自cte1 选择id 来自cte2 其中组计数>=3;
使用返回连续1组的CTE:


你能把它创建为一个并在这里包含链接吗?你期望的输出是什么?我的帖子中提到的值为5,6,7,8的Id列你的MySQL版本是什么?正如我提到的,我想要连续数字的Id是5,6,7,8@user7422128现在试试。更新了答案和演示链接。
*-----*
| id  |
*-----*
| 5   |
| 6   |
| 7   |
| 8   |
*-----*
with cte as (
  select *, sum(diff_chk <> 1) over (order by id) grp
  from tablename    
)  
select id
from cte
where diff_chk = 1
  and grp in (select grp from cte where diff_chk = 1 group by grp having count(*) >= 3)
| id  |
| --- |
| 5   |
| 6   |
| 7   |
| 8   |