我有以下表格
位置表
[ID] [int] IDENTITY(1,1) NOT NULL
包裹表
[ID] [int] IDENTITY(1,1) NOT NULL
PackageObservation表
[PackageID] int
[LocationID] int
[Date] datetime
[Quantity] int
对于给定的位置,我想选择最后一次观察包裹位于
位置的包裹什么是Transact SQL? 我认为它涉及一个常见的表格表达,但我无法弄明白。
更多信息。 以下几乎可以做到,但我真的不想假设身份字段是按日期顺序
select max(id) ,packageid
from packageobservation o1
where not exists (
select o2.id from packageobservation o2
where o2.[date] > o1.[date] )
group by packageid
答案 0 :(得分:1)
您可以使用以下SQL语句:
DECLARE @locationID int = 1
SELECT po.PackageID, MAX(po.[Date]) AS DateAtLocation
FROM PackageObservation po
WHERE po.LocationID=@locationID
AND NOT EXISTS (SELECT * FROM PackageObservation po2
WHERE po2.PackageID = po.PackageID AND
po2.LocationID <> po.LocationID AND
po2.[Date] >= po.[Date] )
GROUP BY po.PackageID
为了获得更好的速度,您还可以在[LocationID],[PackageID]和[Date]上添加组合索引。 在我看来,这里不需要使用CTE。