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