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

求SQL查询语句:从##RUN_ID临时表中筛选目标结果集

解决方法:筛选每个组合的最大RUN_ID记录

看起来你需要从临时表##RUN_ID中,为每个EMPID+STARTDT+VAL的组合保留RUN_ID最大的那条记录,并且按STARTDT升序排列对吧?我根据你的输入数据和期望输出,整理了两种可行的SQL方案:

方案1:使用窗口函数(推荐,逻辑清晰)

窗口函数ROW_NUMBER()可以很方便地为每个分组内的记录排序,直接筛选出每组的第一条(对应最大RUN_ID的记录):

WITH ranked_records AS (
    SELECT 
        RUN_ID,
        EMPID,
        STARTDT,
        VAL,
        -- 按EMPID、STARTDT、VAL分组,组内按RUN_ID降序排名
        ROW_NUMBER() OVER (PARTITION BY EMPID, STARTDT, VAL ORDER BY RUN_ID DESC) AS record_rank
    FROM ##RUN_ID
)
SELECT RUN_ID, EMPID, STARTDT, VAL
FROM ranked_records
WHERE record_rank = 1 -- 取每组排名第一的记录(即RUN_ID最大的)
ORDER BY STARTDT; -- 按日期升序排列,和期望输出顺序一致

方案2:使用GROUP BY子查询关联

如果你更习惯传统的分组查询方式,可以先找出每个组合的最大RUN_ID,再关联原表获取完整记录:

SELECT r.RUN_ID, r.EMPID, r.STARTDT, r.VAL
FROM ##RUN_ID r
INNER JOIN (
    -- 先分组计算每个EMPID+STARTDT+VAL的最大RUN_ID
    SELECT EMPID, STARTDT, VAL, MAX(RUN_ID) AS max_run_id
    FROM ##RUN_ID
    GROUP BY EMPID, STARTDT, VAL
) grouped_data 
    ON r.EMPID = grouped_data.EMPID 
    AND r.STARTDT = grouped_data.STARTDT 
    AND r.VAL = grouped_data.VAL 
    AND r.RUN_ID = grouped_data.max_run_id
ORDER BY r.STARTDT;

结果说明

执行任意一种方案后,针对你提供的测试数据,会得到包含所有符合逻辑的记录(你的期望输出展示了其中两行,推测是示例简化):

RUN_ID EMPID STARTDT   VAL
------ ----- --------- ---
3      1     12/1/2017 A
1      1     1/1/2018  A
5      1     2/1/2018  A
4      1     3/1/2018  A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:36:00