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

Oracle按分组字段实现组内记录编号的技术问题

按分组字段实现组内连续编号的SQL解决方案

你当前使用的SQL仅能生成全局连续的rownum,无法实现按field_1+field_2组合的组内编号:

select rownum, field_1, field_2, field_2
from table1
where field_1 = 726200783
group by rownum, field_1, field_2, field_2
order by field_1, field_2, field_2, rownum

执行后得到的全局编号结果:

ROWNUM  field_1       field_2     field_3 
4       726200783     C           236332639   
1       726200783     C           236361290   
2       726200783     N           235814367   
3       726200783     P           235843569   

你期望的是按field_1与field_2的组合做组内编号,结果如下:

ROWNUM  field_1       field_2     field_3 
1       726200783     C           236361290 
2       726200783     C           236332639    
1       726200783     N           235814367   
1       726200783     P           235843569   

正确实现方式

使用ROW_NUMBER()窗口函数,通过PARTITION BY指定分组字段,ORDER BY控制组内的编号顺序:

SELECT 
    ROW_NUMBER() OVER (PARTITION BY field_1, field_2 ORDER BY field_3) AS rownum,
    field_1,
    field_2,
    field_3
FROM table1
WHERE field_1 = 726200783
ORDER BY field_1, field_2, rownum;

说明

  • PARTITION BY field_1, field_2:指定按这两个字段的组合进行分组,每组单独编号
  • ORDER BY field_3:控制组内的编号顺序(可根据需求替换为其他字段,如时间戳等)
  • 无需额外的GROUP BY,窗口函数已完成分组编号逻辑

如果需要筛选组内特定行(比如rownum = 1),可以将上述查询作为子查询:

SELECT *
FROM (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY field_1, field_2 ORDER BY field_3) AS rownum,
        field_1,
        field_2,
        field_3
    FROM table1
    WHERE field_1 = 726200783
) t
WHERE t.rownum = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:32:19