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

Oracle查询advancedorders表同TICKET_ID分组最早记录方案咨询

问题排查

你当前的查询逻辑是通过max(id)取每个TICKET_ID分组下ID最大的记录,实际获取的是每组最新生成的变更明细,和你需要的「每组最早记录」需求相反。


解决方案

方案1:修改现有聚合查询逻辑

如果你的表ID是自增主键,ID数值越小代表记录生成时间越早,只需要将子查询中的max(id)改为min(id)即可:

SELECT *
FROM database.advancedorders
INNER JOIN (
  SELECT
    TICKET_ID,
    min(id) as minId
    from database.advancedorders
    group by TICKET_ID
) groupedTable
ON advancedorders.id = groupedTable.minId
AND advancedorders.TICKET_ID = groupedTable.TICKET_ID

方案2:Oracle窗口函数写法(更推荐)

使用ROW_NUMBER窗口函数实现,可读性和扩展性更强,后续如果需要取每组第N条记录也可以快速调整:

SELECT * FROM (
  SELECT 
    a.*,
    -- 按TICKET_ID分组,按id升序排序;如果表有工单创建时间字段,更推荐用CREATE_TIME ASC排序更准确
    ROW_NUMBER() OVER(PARTITION BY TICKET_ID ORDER BY id ASC) AS rn
  FROM database.advancedorders a
) t
WHERE rn = 1;

优化建议

  • 如果表中存储了工单变更时间字段(如operation_time、create_time等),优先使用时间字段排序,比用ID判断记录先后更稳妥,可避免ID生成逻辑异常导致的排序错误
  • 如果同一个TICKET_ID可能存在多条同时生成的最早记录,需要全部返回的话,将ROW_NUMBER替换为RANK()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:09