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

查询InvoiceId时关联表并获取TableA的最大版本数据

修正后的SQL查询方案

原查询存在以下关键问题:

  • 字段名错误:子查询中NewA.Version应为NewA.Versionnumber,NewA.BarcodeNumber应为NewA.Barcode
  • 逻辑错误:子查询错误地将最大版本值固定为1,而非匹配当前记录的版本号
  • 重复结果:TableB中存在重复的TableAId记录,会导致结果行重复;且LEFT JOIN后加B.Invoice(应为B.InvoiceId)的过滤条件,实际等价于INNER JOIN

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

通过ROW_NUMBER()给每个Barcode分组内的记录按版本号降序排名,取排名第一的最高版本记录,再关联去重后的TableB数据:

WITH RankedTableA AS (
    SELECT 
        TableAId,
        Barcode,
        Versionnumber,
        -- 按Barcode分组,版本号降序排序,取每个分组的第一条记录
        ROW_NUMBER() OVER (PARTITION BY Barcode ORDER BY Versionnumber DESC) AS row_rank
    FROM TableA
)
SELECT 
    R.TableAId,
    R.Barcode,
    R.Versionnumber,
    B.InvoiceId
FROM RankedTableA R
-- 关联去重后的TableB,避免重复结果
JOIN (
    SELECT DISTINCT TableAId, InvoiceId 
    FROM TableB 
    WHERE InvoiceId = 'abc123'
) B ON R.TableAId = B.TableAId
WHERE R.row_rank = 1;

方案二:使用子查询获取最大版本

先通过子查询统计每个Barcode的最高版本号,再关联TableA获取对应记录,最后关联去重后的TableB:

SELECT 
    A.TableAId,
    A.Barcode,
    A.Versionnumber,
    B.InvoiceId
FROM TableA A
-- 关联每个Barcode的最大版本号
JOIN (
    SELECT Barcode, MAX(Versionnumber) AS MaxVersion
    FROM TableA
    GROUP BY Barcode
) MaxVer ON A.Barcode = MaxVer.Barcode AND A.Versionnumber = MaxVer.MaxVersion
-- 关联去重后的TableB
JOIN (
    SELECT DISTINCT TableAId, InvoiceId 
    FROM TableB 
    WHERE InvoiceId = 'abc123'
) B ON A.TableAId = B.TableAId;

两种方案都能得到预期结果:

TableAIdBarcodeVersionnumberInvoiceId
21234562abc123
31234571abc123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:52:16