You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找数据表列中的最长连续区间?

查找数据表列中最长连续区间的方法

假设你的数据表(比如叫your_table)有一列ID,存储的数值像你示例里的1,2,3,4,5,6,10,11,12,要找出最长的连续数值区间,核心思路是用窗口函数识别连续分组,再计算每组长度找出最大值。我给你分步说明:

步骤1:标记连续区间的分界点

先用LAG()函数获取当前ID的前一个ID,计算两者的差值。如果差值大于1,说明这里是新连续区间的起点:

WITH cte_diff AS (
    SELECT 
        ID,
        -- 第一个ID没有前值,默认和自己相等,差值为0
        CASE WHEN ID - LAG(ID, 1, ID) OVER (ORDER BY ID) > 1 THEN 1 ELSE 0 END AS is_new_group
    FROM your_table
)

步骤2:给每个连续区间分配分组ID

通过累计求和SUM(),把分界点的标记累加,这样同一个连续区间的ID会得到相同的分组ID:

, cte_grouped AS (
    SELECT 
        ID,
        SUM(is_new_group) OVER (ORDER BY ID) AS group_id
    FROM cte_diff
)

步骤3:计算每个区间的长度并找出最长的

对每个分组ID,计算区间的起始、结束值和长度,最后按长度倒序取第一个结果:

SELECT 
    MIN(ID) AS 区间起始值,
    MAX(ID) AS 区间结束值,
    MAX(ID) - MIN(ID) + 1 AS 区间长度
FROM cte_grouped
GROUP BY group_id
ORDER BY 区间长度 DESC
LIMIT 1;

针对你示例数据的执行结果

你的示例ID列是1,2,3,4,5,6,10,11,12,执行上面的SQL后会得到:

区间起始值:1,区间结束值:6,区间长度:6

这就是最长的连续区间啦。如果有多个长度相同的最长区间,LIMIT 1只会返回一个,要是想返回所有,可以去掉LIMIT或者用窗口函数筛选长度等于最大值的行。

内容的提问来源于stack exchange,提问作者user9773216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:14:57