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

PostgreSQL按R_Value降序排序后对连续相同Letter分组取最大值

连续相同Letter分组取最大值SQL实现方案

该需求可以通过标准SQL实现,属于经典的「间隙与岛屿」问题场景,无需额外使用过程式语言或中间表存储。

实现思路

  • 用LAG()窗口函数获取上一行的Letter值,标记出Letter发生切换的行
  • 对切换标记做累计求和,生成连续相同Letter的分组ID
  • 按分组ID和Letter聚合,取每个分组的R_Value最大值

示例代码(兼容所有支持窗口函数的主流数据库:MySQL 8.0+/PostgreSQL/SQL Server/Oracle)

WITH step1 AS (
    SELECT 
        *,
        -- 标记和上一行Letter不同的行
        CASE WHEN LAG(Letter) OVER (ORDER BY R_Value DESC) != Letter THEN 1 ELSE 0 END AS change_flag
    FROM your_table_name -- 替换为实际表名
),
step2 AS (
    SELECT 
        *,
        -- 累计求和生成组ID
        SUM(change_flag) OVER (ORDER BY R_Value DESC) AS group_id
    FROM step1
)
SELECT 
    Letter,
    MAX(R_Value) AS Max_RValue
FROM step2
GROUP BY group_id, Letter
ORDER BY group_id;

逻辑说明

每当Letter发生切换时,change_flag会标记为1,累计求和后组ID就会加1,因此所有连续相同Letter的行会被分配到同一个组ID,既可以区分前后两个不同的A分组,也可以正常聚合计算每个分组的最大值,运行上述代码即可得到目标结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:00