Tsql 公共表表达式选择上次观察的位置
我有下列表格 位置表Tsql 公共表表达式选择上次观察的位置,tsql,common-table-expression,Tsql,Common Table Expression,我有下列表格 位置表 [ID] [int] IDENTITY(1,1) NOT NULL 包装表 [ID] [int] IDENTITY(1,1) NOT NULL 地理观测表 [PackageID] int [LocationID] int [Date] datetime [Quantity] int 对于给定的位置,我想选择最后一次观察到的包所在的位置 什么是Transact-SQL? 我认为它涉及一个常见的表表达式,但我无法理解它 更多信息。 下面的内容几乎可以做到这一点,但我并不想
[ID] [int] IDENTITY(1,1) NOT NULL
包装表
[ID] [int] IDENTITY(1,1) NOT NULL
地理观测表
[PackageID] int
[LocationID] int
[Date] datetime
[Quantity] int
对于给定的位置,我想选择最后一次观察到的包所在的位置
什么是Transact-SQL?
我认为它涉及一个常见的表表达式,但我无法理解它
更多信息。
下面的内容几乎可以做到这一点,但我并不想假设identity字段是按日期顺序排列的
select max(id) ,packageid
from packageobservation o1
where not exists (
select o2.id from packageobservation o2
where o2.[date] > o1.[date] )
group by packageid
您可以使用以下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