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

MariaDB中ID序列断裂时如何计算各连续ID段的min、max值

连续ID段起止值查询方案

针对存在断号的ID序列,按连续段分组统计每个段的最小ID和最大ID,可通过以下两种方案实现:

方案1:窗口函数实现(适配MariaDB 10.2+、MySQL 8.0+版本)

核心逻辑:连续的ID减去按ID排序的行号,差值会保持一致;ID出现断号时差值会发生变化,按差值分组即可拆分出所有连续ID段。

SELECT MIN(id) AS `min(id)`, MAX(id) AS `max(id)`
FROM (
    SELECT 
        id,
        id - ROW_NUMBER() OVER (ORDER BY id) AS group_flag
    FROM book_lists
) AS temp
GROUP BY group_flag
ORDER BY group_flag;

执行后输出结果和需求完全匹配:

+---------+---------+
| min(id) | max(id) |
+---------+---------+
|       1 |       3 |
|       7 |       7 |
|       9 |      10 |
|      12 |      15 |
+---------+---------+

方案2:用户变量实现(兼容旧版本MariaDB、MySQL)

如果数据库版本不支持窗口函数,可以用用户变量标记连续段的分组:

SELECT MIN(id) AS `min(id)`, MAX(id) AS `max(id)`
FROM (
    SELECT 
        id,
        @group := IF(id = @last_id + 1, @group, @group + 1) AS group_flag,
        @last_id := id
    FROM book_lists
    CROSS JOIN (SELECT @last_id := -1, @group := 0) AS init_vars
    ORDER BY id
) AS temp
GROUP BY group_flag
ORDER BY group_flag;

执行结果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:03