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

Oracle多表关联:如何关联对应ID的TABLE_C最新日期行数据

解决方案

要实现按ID关联TABLE_C中每个ID对应日期最新的行,可以用窗口函数ROW_NUMBER()给TABLE_C的记录按ID分组、日期倒序编号,筛选出每个ID的第一条(即最新日期)记录后,再和主查询关联。具体SQL如下:

SELECT * 
FROM TABLE_A a 
LEFT JOIN TABLE_B b ON b.ID = a.ID
LEFT JOIN (
    SELECT 
        c.*,
        ROW_NUMBER() OVER (PARTITION BY c.ID ORDER BY c.DATECOLUMN DESC) AS rn
    FROM TABLE_C c
) c_filtered ON c_filtered.ID = a.ID AND c_filtered.rn = 1

关键逻辑说明:

  • PARTITION BY c.ID:按ID分组,保证每个ID的记录独立排序
  • ORDER BY c.DATECOLUMN DESC:每组内按日期倒序排列,最新日期的行排在首位
  • ROW_NUMBER() ... AS rn:给每组内的记录生成序号,最新行的序号为1
  • 子查询筛选rn = 1的行,得到每个ID的唯一最新记录,再通过ID与主表关联

如果你的数据库支持FETCH FIRST 1 ROW ONLY,也可以用关联子查询实现,但窗口函数的写法更清晰,且在数据量较大时性能更优:

SELECT * 
FROM TABLE_A a 
LEFT JOIN TABLE_B b ON b.ID = a.ID
LEFT JOIN TABLE_C c ON c.ID = a.ID
WHERE c.DATECOLUMN = (
    SELECT MAX(DATECOLUMN) 
    FROM TABLE_C 
    WHERE ID = a.ID
)
-- 注意:若TABLE_C中同一ID存在多条相同最新日期的记录,该写法会返回所有符合的行;需唯一行时优先用窗口函数方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:39:49