MySQL计算最长的运行长度

MySQL计算最长的运行长度,mysql,sql,mariadb,window-functions,gaps-and-islands,Mysql,Sql,Mariadb,Window Functions,Gaps And Islands,我正在使用MySQL/Maria数据库,并正在连接两个MyISAM表。我返回的数据集如下所示 ID Value1 Value2 1 xxx xxx 2 xxx xxx 3 xxx xxx 8 xxx xxx 9 xxx xxx 10 xxx xxx 11 xxx xxx 18 xxx xxx 19 xxx xxx 20 xxx xxx 我想知道是否有一种方法可以返回最长序列的计数。为了澄清,1,2,3为3

我正在使用MySQL/Maria数据库,并正在连接两个MyISAM表。我返回的数据集如下所示

ID Value1 Value2
1   xxx    xxx
2   xxx    xxx
3   xxx    xxx
8   xxx    xxx
9   xxx    xxx
10  xxx    xxx
11  xxx    xxx
18  xxx    xxx
19  xxx    xxx
20  xxx    xxx
我想知道是否有一种方法可以返回最长序列的计数。为了澄清,1,2,3为3的运行长度,8-11为4的运行长度,18-20为3的运行长度

所以我想返回的只是“4”的值


我从python脚本运行查询,可以通过python轻松地找到它,但我希望有一种方法可以通过sql查询实现。我可能要处理几百万条记录,因此我试图避免循环遍历所有这些记录。

这是一个缺口和孤岛问题,您需要最大孤岛的长度

您可以使用窗口功能:

select count(*) cnt, min(id) start_id, max(id) end_id
from (select id, row_number() over(order by id) rn from mytable t) t
group by id - rn
order by count(*) desc 
limit 1
这可能会有帮助