首页 > 解决方案 > 如何仅选择联接查询中的最新行

问题描述

我对复杂的 SQL 查询很陌生,所以如果这个问题很容易解决,请原谅。我有一个带有 VocabCards 的表,重要的列只是 ID。然后我有一个 VocabCardEvent 表,它保存发生在这个 VocabCard 上的事件。在这个用例中我必须得到的事件是难度的变化。重要的列是 ID(varchar)、CreatedDate(DateTime) 和保存难度变化的 Type(int)。ID 有 16 个字符:8 个来自抽认卡和 8 个唯一字符。

现在我的问题:我需要获取所有 VocabCard 和相应的最新VocabCardEvent。我怎样才能做到这一点?

到目前为止我所做的:

我希望这个解释是正确的。感谢您尝试在前面提供帮助。

标签: sqlsql-server

解决方案


在 SQL Server 中,APPLY是一个非常好的方法:

select vc.*, vce.*
from VocabCards vc outer apply
     (select top (1) vce.*
      from VocabCardEvents vce
      where vce.vocabcardid = vc.id
      order by vce.createddate desc
     ) vce;

推荐阅读