sql - 在 where 条件下使用子查询结果
问题描述
我遇到了一个可能很简单的查询问题,我无法正常工作。我也不完全确定如何谷歌它。就这样吧。
我有 2 张桌子:
- TableA - 保存我需要返回的主要记录
- 表 B - 表 A 中的每条记录保存许多记录
我需要做的就是从 TableA 返回匹配查询的记录,例如:
SELECT Description, Type, Status
FROM TableA
WHERE Status = 2;
但是最后有这个额外的位(我知道查询是错误的,但希望它能让您了解我所追求的(伪代码):
SELECT ID, Description, Type, Status
FROM TableA
JOIN TableB ON TableB.ID = TableA.ID
WHERE Status = 2
AND (MIN(TableB.StatusChanged) > DATEADD(minute, -15, GETDATE()))
AND TableB.Status < 5;
所以基本上我想从TableA返回所有记录,只要它们在TableA中的状态为2,并且TableB中最早的记录至少有15分钟,并且状态值小于5。
希望我以一种您可以理解我要完成的工作的方式对其进行了解释。
解决方案
用于CROSS APPLY
模拟连接并仅获取第一个匹配项:
SELECT a.Description, a.Type, a.Status, b.*
FROM TableA a
CROSS APPLY (
SELECT TOP 1 *
FROM TableB b
WHERE a.ID = b.ID -- the join condition
AND b.Status < 5
AND b.StatusChanged < DATEADD(MINUTE, -15, GETDATE()
ORDER BY b.StatusChanged -- the earliest one that matches
) b
WHERE a.Status = 2;
推荐阅读
- java - 如何从另一个图像中加载像素
- keras - 音乐作为 LSTM 模型的输入
- c# - 如何延长 Rx.NET 中 Observable Timer 的持续时间?
- tensorflow - 如何在 LSTM 变分自动编码器中将潜在向量传递给解码器
- wordpress - WooCommerce:不同产品的不同“店铺基址”
- xamarin.forms - Scrollview 在 Xamarin 表单中不起作用
- django - LinkColum 与 urlencode()
- ruby-on-rails - 使用嵌套属性时构造视图的正确方法
- javascript - 从 Reddit/REST API 获取和呈现数据
- selenium - Selenium如何单击/访问具有javascript功能的带有href的a标签