有限的T-SQL加入

Adr*_*ong 4 t-sql sql-server join limit

这应该很简单,但不知何故,我的大脑停止了工作.

我有两个相关的表:

表格1:

ID (PK), Value1
Run Code Online (Sandbox Code Playgroud)

表2:

BatchID, Table1ID (FK to Table 1 ID), Value2
Run Code Online (Sandbox Code Playgroud)

示例数据:

表格1:

ID  Value1
1   A
2   B
Run Code Online (Sandbox Code Playgroud)

表2:

BatchID  Table1ID  Value2
1        1         100
2        1         101
3        1         102
1        2         200
2        2         201
Run Code Online (Sandbox Code Playgroud)

现在,对于表1中的每条记录,我想在表2中进行匹配记录,但只有最新的记录(批次ID是顺序的).以上示例的结果将是:

Table1.ID  Table1.Value1  Table2.Value2
1          A              102
2          B              201
Run Code Online (Sandbox Code Playgroud)

问题很简单,如何用Table2限制连接结果.SO上有类似的问题,但找不到像我这样的东西.这是一个看起来类似的MySQL: 限制SQL JOIN

我对任何方法持开放态度,尽管速度仍然是主要优先事项,因为它将成为一个大数据集.

Cad*_*oux 10

WITH Latest AS (
    SELECT Table1ID
        ,MAX(BatchID) AS BatchID
    FROM Table2
    GROUP BY Table1ID
)
SELECT *
FROM Table1
INNER JOIN Latest
    ON Latest.Table1ID = Table1.ID
INNER JOIN Table2
    ON Table2.BatchID = Latest.BatchID
Run Code Online (Sandbox Code Playgroud)

  • SQL Server 2005中引入了公用表表达式(CTE),这个答案是正确的. (3认同)