我正在尝试加入2个表格。
表1(resource_log)是一个数据源,包含各种列,日期,时间,联系号码等。每次发生事务并在表中插入新行。
表2(目录)是一个提供姓名,团队,联系电话等的目录。
表2中的内容经常更新,保留以前的记录,最近的记录具有最近的记录日期(rdate)。
我想要做的是 - 显示2次之间的记录并加入表2中的最新目录信息。
我已经写了这个,它会拉回两个表但没有结果。
我将使用一个具体的,但假设的例子。
SELECT top 20 *
FROM resource_log r
INNER JOIN directory
ON substring(rl.issi,4,4) =
(
SELECT distinct top 1 d.rdate
FROM directory d
WHERE substring(d.id,2,4) = substring(r.id,4,4)
ORDER BY d.rdate desc
)
WHERE r.date_and_time between '2016-09-13 11:00:00' and '2016-09-13 11:10:00' and r.id = '123456'
有什么建议吗?
答案 0 :(得分:1)
我认为您需要cross apply
或outer apply
:
SELECT top 20 *
FROM resource_log r OUTER APPLY
(SELECT TOP 1 d.rdate
FROM directory d
WHERE substring(d.id, 2, 4) = substring(r.id, 4, 4)
ORDER BY d.rdate desc
) d
WHERE r.date_and_time between '2016-09-13 11:00:00' and '2016-09-13 11:10:00' and
r.id = '123456';
这将返回没有匹配目录的resource_log
条记录。如果您不想要它们,请使用CROSS APPLY
。
此外,子查询中不需要distinct
,因为您只选择一个值。