MySQL计算最长运行长度

Posted

技术标签:

【中文标题】MySQL计算最长运行长度【英文标题】:MySQL count the longest run length 【发布时间】:2020-10-01 14:23:26 【问题描述】:

我正在使用 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 查询来完成。我可能会处理几百万条记录,因此我试图避免遍历所有这些记录。

【问题讨论】:

这可能对***.com/questions/4340793/…有帮助 【参考方案1】:

这是一个间隙和岛屿问题,您需要最大岛屿的长度。

你可以使用窗口函数:

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

【讨论】:

以上是关于MySQL计算最长运行长度的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句获取列最长字符串的长度

计算最长的字符串长度

[PTA]习题11-3 计算最长的字符串长度

计算无重复字符的最长子串

[PTA]实验11-1-4 计算最长的字符串长度

JS动态规划计算最长回文子串