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

DB2中关联表获取分组最大nr值并关联rsp字段的实现

数据表关联处理方案:提取最大nr记录并格式化etu字段

搞定这个需求很直观,我先把基础数据、需求逻辑和可执行的SQL方案一步步理清楚:

一、基础数据表信息

先明确两个源表的结构和数据:

Table I

etunr
12
22
23
21
34
39

Table A

eturspnr
282
273
231
324
369

二、核心需求拆解

我们要生成的结果表需要满足三个关键规则:

  • 基于etu和nr字段关联Table I和Table A
  • 每个etu只保留nr值最大的那一条记录,并匹配对应的rsp值
  • 如果Table I中某个etu存在多条记录,结果里的etu值要加上后缀..

三、可执行SQL实现(标准SQL兼容多数数据库)

WITH ranked_etu_records AS (
    SELECT 
        etu,
        nr,
        -- 统计当前etu的总记录数,用于判断是否加后缀
        COUNT(*) OVER (PARTITION BY etu) AS etu_record_count,
        -- 给每个etu下的nr按降序排名,排名1的就是最大nr
        ROW_NUMBER() OVER (PARTITION BY etu ORDER BY nr DESC) AS rank_num
    FROM TableI
)
SELECT 
    -- 根据记录数决定是否添加".."后缀
    CASE 
        WHEN rer.etu_record_count > 1 THEN CONCAT(rer.etu, '..') 
        ELSE CAST(rer.etu AS VARCHAR) 
    END AS etu,
    rer.nr,
    ta.rsp
FROM ranked_etu_records rer
INNER JOIN TableA ta 
    ON rer.etu = ta.etu AND rer.nr = ta.nr
WHERE rer.rank_num = 1; -- 只保留每个etu下nr最大的记录

四、执行结果验证

运行上面的SQL后,会得到你需要的结果表:

etunrrsp
2..37
3..96

五、逻辑说明

  1. CTE预处理Table I:用窗口函数先给每个etu分组,统计组内记录数,同时给组内的nr按降序排号,这样排名第1的就是该etu下最大的nr记录。
  2. 关联Table A:通过etu和nr把预处理后的Table I和Table A关联,确保拿到对应rsp值。
  3. 格式化etu字段:用CASE判断,如果当前etu的记录数大于1,就拼接..后缀,否则直接显示原数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:41:02