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

SQL查询获取对应最早时间的FIELD_NUMERIC_OLD值问题咨询

解决SQL获取最早时间对应字段值的问题

你的原查询因为分组逻辑错误,导致返回了多条无关记录。要获取NAM5344483工单下,最早变更时间对应的FIELD_NUMERIC_OLD值,可采用以下两种方案:

方案一:使用窗口函数(推荐)

利用ROW_NUMBER()按变更时间排序,直接取最早的一条记录:

SELECT MIN_INSTANCE, FIELD_NUMERIC_OLD
FROM (
    SELECT 
        TRUNC(efc.DATESTAMP) AS MIN_INSTANCE,
        efc.FIELD_NUMERIC_OLD,
        -- 按日期升序排序,最早的记录排号为1
        ROW_NUMBER() OVER (ORDER BY TRUNC(efc.DATESTAMP) ASC) AS rn
    FROM EVENT_FIELD_CHANGES efc
    JOIN SCE.EVENTS_LIST el ON el.EVENT_SEQ = efc.EVENT_SEQ
    WHERE efc.DESCRIPTION = 'Number of Units Change'
      AND el.JOB_REFERENCE = 'NAM5344483'
) t
WHERE rn = 1;

如果存在多条记录共享同一个最早变更时间,且你需要保留所有这些记录,可将ROW_NUMBER()替换为RANK()。

方案二:子查询关联筛选

先通过子查询找到最早的变更日期,再关联原表获取对应字段值:

SELECT 
    TRUNC(efc.DATESTAMP) AS MIN_INSTANCE,
    efc.FIELD_NUMERIC_OLD
FROM EVENT_FIELD_CHANGES efc
JOIN SCE.EVENTS_LIST el ON el.EVENT_SEQ = efc.EVENT_SEQ
WHERE efc.DESCRIPTION = 'Number of Units Change'
  AND el.JOB_REFERENCE = 'NAM5344483'
  -- 匹配子查询算出的最早日期
  AND TRUNC(efc.DATESTAMP) = (
      SELECT MIN(TRUNC(DATESTAMP))
      FROM EVENT_FIELD_CHANGES efc_sub
      JOIN SCE.EVENTS_LIST el_sub ON el_sub.EVENT_SEQ = efc_sub.EVENT_SEQ
      WHERE efc_sub.DESCRIPTION = 'Number of Units Change'
        AND el_sub.JOB_REFERENCE = 'NAM5344483'
  );

这种方式会返回所有对应最早日期的记录,适合存在同时间多条变更的场景。

原查询问题说明

你原来的查询中,GROUP BY el.JOB_REFERENCE但SELECT里包含未聚合的efc.FIELD_NUMERIC_OLD,这不符合标准SQL分组规则(部分宽松模式的数据库可能允许,但结果不可控)。最终会返回该工单下所有FIELD_NUMERIC_OLD值,同时每条记录都显示整个分组的最早日期,这就是你看到两行结果的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:35:32