sql-server - 有限的 T-SQL 连接

标签 sql-server tsql join limit

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

我有两个相关的表:

表 1:

ID (PK), Value1

表 2:

BatchID, Table1ID (FK to Table 1 ID), Value2

示例数据:

表 1:

ID  Value1
1   A
2   B

表 2:

BatchID  Table1ID  Value2
1        1         100
2        1         101
3        1         102
1        2         200
2        2         201

现在,对于表 1 中的每条记录,我想在表 2 上进行匹配记录,但仅限于最近的记录(批处理 ID 是连续的)。上述示例的结果将是:

Table1.ID  Table1.Value1  Table2.Value2
1          A              102
2          B              201

问题很简单,如何限制与Table2的连接结果。 SO 上也有类似的问题,但找不到像我这样的问题。 MySQL 上的一个看起来类似: LIMITing an SQL JOIN

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

最佳答案

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

关于sql-server - 有限的 T-SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1027387/

相关文章:

sql - 从两个连续行中检索组合的查询

SQL 全外连接重复问题

mysql - 如何从 mysql 连接接收 1 行而不是 4 行

sql - 在 sql 中调用 View 内部的 View 是不是很糟糕

sql - 我可以在 SQL 的聚合函数中包含非聚合列而不将其放入 GROUP BY 子句中吗?

sql - 事务处理 SQL : Display two SUM() from differents tables?

sql - 使用 SELECT 的 SQL Server 变量赋值中的执行顺序

Python Django 模型执行连接查询

sql - 在 SQL Server 中存储(产品)属性的最佳模式

sql - 如何备份 SQL 2008 表和存储过程?