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

Oracle SQL 按SR_NO分组取LINE_NO最大值对应整行记录方案

Oracle按分组取每组最大值对应完整记录实现方案

现有表信息

表名:DOA_MAINT,存量数据如下:

SR_NOITEMLINE_NOTYPE
100A10198
100A10294
200A20177
200A20298
200A20356

需求目标

对表中数据按SR_NO字段分组,返回每个分组内LINE_NO字段最大值对应的完整单条记录,期望结果如下:

SR_NOITEMLINE_NOTYPE
100A10294
200A20356

实现代码

方案1:窗口函数实现(推荐,性能更优)

SELECT SR_NO, ITEM, LINE_NO, TYPE
FROM (
    SELECT 
        SR_NO,
        ITEM,
        LINE_NO,
        TYPE,
        ROW_NUMBER() OVER(PARTITION BY SR_NO ORDER BY LINE_NO DESC) AS group_rn
    FROM DOA_MAINT
) t
WHERE group_rn = 1;

逻辑说明

  • 内层查询通过ROW_NUMBER()窗口函数,以SR_NO为分组维度,每组内按LINE_NO倒序排序,为每行生成组内唯一序号
  • 外层筛选序号为1的记录,即为每个SR_NO分组下LINE_NO最大的对应记录

若同一SR_NO下存在多条LINE_NO相同的最大值记录需要全部返回,可将ROW_NUMBER()替换为RANK()即可。

方案2:子查询关联实现

SELECT a.*
FROM DOA_MAINT a
INNER JOIN (
    SELECT SR_NO, MAX(LINE_NO) AS MAX_LINE_NO
    FROM DOA_MAINT
    GROUP BY SR_NO
) b ON a.SR_NO = b.SR_NO AND a.LINE_NO = b.MAX_LINE_NO;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:21:03