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

如何在SQL中按特定顺序将行分组为连续集合并提取每组指定列最小值

实现方案

这是SQL中典型的**连续值分组(岛屿问题)**场景,核心思路是通过窗口函数差值给连续相同的two值打相同的分组标记,再分组取最小值即可,以下方案兼容所有支持标准SQL窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)。

完整SQL代码

WITH t AS (
    SELECT 
        *,
        -- 全局行号,按three升序排序保证顺序正确
        ROW_NUMBER() OVER (PARTITION BY one ORDER BY three) rn1,
        -- 按one、two分区后的行号
        ROW_NUMBER() OVER (PARTITION BY one, two ORDER BY three) rn2
    FROM 你的表名
)
SELECT 
    one,
    two,
    MIN(three) AS three
FROM t
-- rn1-rn2值相同的行,就是two值连续的同组数据
GROUP BY one, two, rn1 - rn2
ORDER BY three;

逻辑说明

  • 连续相同的two值行,全局行号和分区行号的增长速度完全一致,所以二者差值固定,用这个差值作为分组ID即可区分不同的连续组
  • 如果你的表中one列只有固定值,可以去掉PARTITION BY one的逻辑,不影响结果
  • 执行后输出结果和你给出的预期完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:30:04