0

我有一个 sql 语句,我从表(机器)中获取所有 Id 的列表。

然后需要(事件)中另一行的最新实例,其中 id 匹配所以一直在进行子选择。

我需要很多与 id 匹配的字段的最新实例,因此在这个单一语句中一个接一个地进行这些子选择,因此最终得到与此类似的结果......

这行得通,结果很准确,因为事件表有数百万条记录,它变得非常慢。Machine 表平均有 100 条记录。

有没有更好的子选择解决方案?也许做内部连接或存储过程?

帮助表示赞赏:)

4

1 回答 1

2

您可以使用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的——可以返回多行和多列。

于 2021-02-03T11:43:07.170 回答