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

如何用SQL合并MariaDB 10.5 InnoDB表中连续ID的行?

如何将MariaDB 10.5中连续的ext_id分组为范围展示

针对你的需求,利用MariaDB 10.5支持的窗口函数,可轻松识别连续ID的分组,输出你需要的两种格式:

格式一:分开展示起止ID

该格式适合后续数据分析或进一步处理,SQL语句如下:

SELECT
    MIN(ext_id) AS id_start,
    MAX(ext_id) AS id_end
FROM (
    -- 生成分组标识:连续ID的ext_id减去行号会得到相同值
    SELECT
        ext_id,
        ext_id - ROW_NUMBER() OVER (ORDER BY ext_id) AS group_id
    FROM your_table_name -- 替换为你的实际表名
) grouped
GROUP BY group_id
ORDER BY id_start;

逻辑说明:

子查询中,ROW_NUMBER()按ext_id排序生成连续行号,连续的ext_id与行号的差值固定,以此作为分组依据;外层查询按分组聚合,取每组的最小/最大值即为连续ID的起止。


格式二:合并为范围字符串

如果需要直接输出1-2这种紧凑格式,可通过CASE和CONCAT处理聚合结果:

SELECT
    CASE
        WHEN MIN(ext_id) = MAX(ext_id) THEN CAST(MIN(ext_id) AS CHAR)
        ELSE CONCAT(MIN(ext_id), '-', MAX(ext_id))
    END AS id
FROM (
    SELECT
        ext_id,
        ext_id - ROW_NUMBER() OVER (ORDER BY ext_id) AS group_id
    FROM your_table_name -- 替换为你的实际表名
) grouped
GROUP BY group_id
ORDER BY MIN(ext_id);

额外说明:

如果表中存在重复的ext_id,可在子查询中添加DISTINCT去重,避免干扰分组逻辑:

SELECT DISTINCT ext_id, ext_id - ROW_NUMBER() OVER (ORDER BY ext_id) AS group_id FROM your_table_name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:35:36