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

如何获取含字段最大值的唯一结果?SQL查询优化求助

解决SQL查询中重复donorig_cdn的问题

你的问题核心是每个donorig_cdn只保留对应最大cerhue_dt的那条记录,原查询因为同时按donorig_cdn和cerhue_num_rfa分组,所以同一个donorig_cdn下不同的cerhue_num_rfa会生成多条结果。下面给你两种实用的解决方案:

方法一:使用窗口函数(推荐,简洁高效)

窗口函数ROW_NUMBER()可以给每个分组内的记录排序,我们按donorig_cdn分组,然后对每个分组内的记录按cerhue_dt降序排列,取排序后行号为1的记录,就是每个donorig_cdn最新的那条:

SELECT donorig_cdn, cerhue_num_rfa, cerhue_dt
FROM (
    SELECT 
        donorig_cdn, 
        cerhue_num_rfa, 
        cerhue_dt,
        ROW_NUMBER() OVER (PARTITION BY donorig_cdn ORDER BY cerhue_dt DESC) AS rn
    FROM t_certif_hue
) AS sub
WHERE rn = 1
ORDER BY donorig_cdn;

逻辑解释:

  • PARTITION BY donorig_cdn:把数据按donorig_cdn分成独立的组
  • ORDER BY cerhue_dt DESC:每个组内按cerhue_dt从新到旧排序
  • rn = 1:只保留每个组里排序后的第一条(也就是cerhue_dt最大的那条)

方法二:子查询关联(兼容旧版SQL)

如果你的数据库不支持窗口函数(比如某些老版本的MySQL),可以先通过子查询找出每个donorig_cdn的最大cerhue_dt,再关联原表获取对应的cerhue_num_rfa:

SELECT t.donorig_cdn, t.cerhue_num_rfa, t.cerhue_dt
FROM t_certif_hue t
INNER JOIN (
    SELECT donorig_cdn, MAX(cerhue_dt) AS max_dt
    FROM t_certif_hue
    GROUP BY donorig_cdn
) AS sub ON t.donorig_cdn = sub.donorig_cdn AND t.cerhue_dt = sub.max_dt
ORDER BY t.donorig_cdn;

注意点:

如果同一个donorig_cdn存在多条记录拥有相同的最大cerhue_dt,这个方法会返回所有这些记录。如果要确保每个donorig_cdn只返回一条,可以在子查询里再加上cerhue_num_rfa的聚合(比如MAX(cerhue_num_rfa)),或者结合方法一的窗口函数逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:44