首页 > 解决方案 > 如果您的结果返回两个不同的时间,则使用 SQL 获取最新的进入时间,我应该使用交叉应用还是外部应用?

问题描述

所以我想datediff用于两个我正在加入的表。问题是如果我按唯一值过滤,它会返回两行结果。例如:

select *
from [internalaudit]..ReprocessTracker with (nolock)
where packageID = '1983446'

它返回两行,因为它被两个不同的工人重新包装了两次。

User               RepackageTime

KimVilder          2021-06-10
DanielaS           2021-06-05

我想使用该唯一 packageID 的最新重新打包时间,然后在我与另一个表进行连接时使用另一个时间记录进行 datediff。

有没有办法归档以便我可以获得 Repackagetime 的最新时间条目?

标签: sqldatediffcross-applyouter-apply

解决方案


select * 
from Othertable t1
join (
select *
from [internalaudit]..ReprocessTracker t2
where packageID = '1983446'
limit 1
) t2
on t1.id = t2.id 

如果你使用 sql server 而不是 limit 1,你也应该使用 top 1,否则你有充分的理由使用 nolock 提示,避免使用它。

还要概括上面的查询:

select * 
from Othertable t1
cross join (
select *
from [internalaudit]..ReprocessTracker t2
where t1.packageID = t2.packageID
limit 1
) t2

推荐阅读