【发布时间】:2012-03-02 09:32:57
【问题描述】:
我试图通过 LEFT OUTER JOINing 两个表来比较两个表,并在右表中找到任何不匹配的结果。问题是我有一个 TicketNo、ItemNo 和 UniqueID 的复合键,我只需要比较任何给定 TicketNo 的唯一 ID 最高的行。
我需要这些数据,以便我的程序知道它是否需要更新工作副本表以及如果需要更新哪些行。
基本上我想要的是这样的:
SELECT TicketNo
FROM History t1
LEFT OUTER JOIN Working t2 on
max(t1.[UniqueID])=t2.[UniqueID]
AND t1.[TicketNo]=t2.[TicketNo]
AND t1.[ItemNo]=t2.[ItemNo]
WHERE t2.[TicketNo] IS NULL
但我不能在这里使用聚合函数 max。我不知道如何使用子查询(或不能使用 CTE,但我更喜欢子查询)来仅获取给定 TicketNo 的最大唯一 ID。我不能只加入表中最高的 uniqueID。
我的数据看起来像这样,假设有两个重复:
TicketNo UniqueID ItemNo
15 1270662207 1
15 1184857061 1
在这种情况下,我只希望 first 行返回。我不在乎我的工作表是否有带有TicketNo 15 的旧行。
【问题讨论】:
标签: sql sql-server sql-server-2005 join