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

SQL Server数据仓库左连接后获取单条最新记录的实现求助

解决方案

可以使用**窗口函数ROW_NUMBER()**实现需求,核心逻辑是先对ONT.OE_Order_Price_Attribs表按Header_Id、Line_Id、Last_Update_Date分组,在每组内按Order_Price_Attrib_Id降序排序,标记出每组的第一条记录(即ID最大的那条),再与基础表关联。

完整SQL语句

SELECT
    OL.*,
    OPA_filtered.*
FROM ONT.OE_Order_Lines_All OL
LEFT JOIN (
    SELECT 
        *,
        -- 按分组排序,标记每组内ID最大的记录为行号1
        ROW_NUMBER() OVER (
            PARTITION BY Header_Id, Line_Id, Last_Update_Date
            ORDER BY Order_Price_Attrib_Id DESC
        ) AS rn
    FROM ONT.OE_Order_Price_Attribs
) OPA_filtered
    ON OL.Header_Id = OPA_filtered.Header_Id
    AND OL.Line_Id = OPA_filtered.Line_Id
    -- 只保留每组内的第一条记录(ID最大的)
    AND OPA_filtered.rn = 1

逻辑说明

  1. 子查询中通过PARTITION BY Header_Id, Line_Id, Last_Update_Date将OPA表的数据按这三个字段分组,确保同一组内是需要去重的重复记录。
  2. ORDER BY Order_Price_Attrib_Id DESC让每组内Order_Price_Attrib_Id最大的记录排在最前面,行号标记为1。
  3. 外层关联时只取行号为1的记录,这样每个Header_Id+Line_Id+Last_Update_Date组合只会保留一条ID最大的记录,同时完整保留所有att*列的数据。
  4. 保持LEFT JOIN确保即使OPA表中没有对应记录,OL表的记录也会被保留,与原关联逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:22:36