如果你的结果 returns 两次不同的时间,使用 SQL 获取最新的进入时间,我应该使用 cross 还是 outer apply?
Get the latest entry time using SQL if your result returns two different time, should I use cross or outer apply?
所以我想将 datediff
用于我正在加入的两个 table。问题是如果我按唯一值过滤,它会 returns 两行结果。例如:
select *
from [internalaudit]..ReprocessTracker with (nolock)
where packageID = '1983446'
它 returns 两行,因为它被两个不同的工人重新包装了两次。
User RepackageTime
KimVilder 2021-06-10
DanielaS 2021-06-05
我想使用该唯一 packageID 的最新重新打包时间,然后在我使用不同的 table.
进行连接时使用另一个时间记录进行 datediff
有没有什么方法可以让我得到 Repackagetime 的最新时间条目?
select *
from Othertable t1
join (
select *
from [internalaudit]..ReprocessTracker t2
where packageID = '1983446'
limit 1
) t2
on t1.id = t2.id
如果您使用 sql 服务器而不是 limit 1,您应该使用 top 1
否则你有充分的理由使用 nolock 提示,避免使用它。
也概括上面的查询:
select *
from Othertable t1
cross join (
select *
from [internalaudit]..ReprocessTracker t2
where t1.packageID = t2.packageID
limit 1
) t2
如果我了解您的目标,您可以通过多种方式实现此目标 - 适当的示例数据和表格将在此处提供帮助。
一种方法是使用 apply
并为每个 packageId
选择 max
日期
select DateDiff(datepart, t.datecolumn, r.RepackageTime)...
from othertable t
cross apply (
select Max(RepackageTime)RepackageTime
from internalaudit.dbo.ReprocessTracker r
where r.packageId=t.packageId
)r
所以我想将 datediff
用于我正在加入的两个 table。问题是如果我按唯一值过滤,它会 returns 两行结果。例如:
select *
from [internalaudit]..ReprocessTracker with (nolock)
where packageID = '1983446'
它 returns 两行,因为它被两个不同的工人重新包装了两次。
User RepackageTime
KimVilder 2021-06-10
DanielaS 2021-06-05
我想使用该唯一 packageID 的最新重新打包时间,然后在我使用不同的 table.
进行连接时使用另一个时间记录进行 datediff有没有什么方法可以让我得到 Repackagetime 的最新时间条目?
select *
from Othertable t1
join (
select *
from [internalaudit]..ReprocessTracker t2
where packageID = '1983446'
limit 1
) t2
on t1.id = t2.id
如果您使用 sql 服务器而不是 limit 1,您应该使用 top 1 否则你有充分的理由使用 nolock 提示,避免使用它。
也概括上面的查询:
select *
from Othertable t1
cross join (
select *
from [internalaudit]..ReprocessTracker t2
where t1.packageID = t2.packageID
limit 1
) t2
如果我了解您的目标,您可以通过多种方式实现此目标 - 适当的示例数据和表格将在此处提供帮助。
一种方法是使用 apply
并为每个 packageId
max
日期
select DateDiff(datepart, t.datecolumn, r.RepackageTime)...
from othertable t
cross apply (
select Max(RepackageTime)RepackageTime
from internalaudit.dbo.ReprocessTracker r
where r.packageId=t.packageId
)r