sql - 如何仅选择联接查询中的最新行
问题描述
我对复杂的 SQL 查询很陌生,所以如果这个问题很容易解决,请原谅。我有一个带有 VocabCards 的表,重要的列只是 ID。然后我有一个 VocabCardEvent 表,它保存发生在这个 VocabCard 上的事件。在这个用例中我必须得到的事件是难度的变化。重要的列是 ID(varchar)、CreatedDate(DateTime) 和保存难度变化的 Type(int)。ID 有 16 个字符:8 个来自抽认卡和 8 个唯一字符。
现在我的问题:我需要获取所有 VocabCard 和相应的最新VocabCardEvent。我怎样才能做到这一点?
到目前为止我所做的:
- 子查询(问题:我无法将当前的抽认卡 ID 传递给子查询,所以我总是得到第一个 VocabCardEvent)
- 加入 Top(1) 并按 CreatedDate 排序(问题:我只有一张 VocabCard)
- 加入子查询(问题:我得到了所有的 VocabCardEvents 所以我有一个 VocabCard 多次)
我希望这个解释是正确的。感谢您尝试在前面提供帮助。
解决方案
在 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;
推荐阅读
- python-3.x - 我在数据框中有两列“第一响应时间(HH:MM:SS)和“目标”,其值为“00:08:40”和“00:25:00”,同时减去我面临的错误
- c# - Auto mapper : Mapping two objects Ignoring few properties dynamically
- python - How to split dataframe on based on columns row
- html - 输入元素溢出容器
- c# - 在按钮单击时在代码中获取按钮的属性值
- c++ - 使用带有元组和可变参数模板的整数序列
- php - PHP访问对象并将其存储在数组中还是将对象作为数组访问?
- perl - 为什么“尝试”不会导致未定义的子程序错误?
- batch-file - 使用批处理在 csv 文件中查找字符串
- git - Git 保留远程还原的代码