我有一个 sql 语句,我从表(机器)中获取所有 Id 的列表。
然后需要(事件)中另一行的最新实例,其中 id 匹配所以一直在进行子选择。
我需要很多与 id 匹配的字段的最新实例,因此在这个单一语句中一个接一个地进行这些子选择,因此最终得到与此类似的结果......
这行得通,结果很准确,因为事件表有数百万条记录,它变得非常慢。Machine 表平均有 100 条记录。
有没有更好的子选择解决方案?也许做内部连接或存储过程?
帮助表示赞赏:)
我有一个 sql 语句,我从表(机器)中获取所有 Id 的列表。
然后需要(事件)中另一行的最新实例,其中 id 匹配所以一直在进行子选择。
我需要很多与 id 匹配的字段的最新实例,因此在这个单一语句中一个接一个地进行这些子选择,因此最终得到与此类似的结果......
这行得通,结果很准确,因为事件表有数百万条记录,它变得非常慢。Machine 表平均有 100 条记录。
有没有更好的子选择解决方案?也许做内部连接或存储过程?
帮助表示赞赏:)
您可以使用apply
. 您没有指定如何定义“最新实例”。让我假设它基于时间列:
Select a.id, b.*
from TableA a outer apply
(select top(1) b.Name, b.time, b.weight
from b
where b.id = a.id
order by b.time desc
) b;
两者APPLY
和相关的子查询都需要ORDER BY
执行您想要的操作。
APPLY
很像FROM
子句中的相关查询——有两个方便的增强。横向连接——技术上是做什么APPLY
的——可以返回多行和多列。