2017-07-27 102 views
0

我有一个表格,其中包含有关这些车辆上发生的车辆和事件的信息。 EX:仅返回历史记录表中的最大事件日期

VehicleEvent

VehicleRefNum | EventTypeCode | EventDate 
     1  | OutOfService  | 2017-06-28 
     2  | EngineRepair  | 2016-05-15       
     3  | OutOfService  | 2016-04-02       
     4  | OtherRepair  | 2017-07-21       
     1  | ReturnToService | 2017-07-01        
     5  | NewToService  | 2017-07-27 
     6  | OutOfService  | 2017-05-15        
     3  | ReturnToService | 2016-04-21 
     1  | OutOfService  | 2017-07-09          
     1  | ReturnToService | 2017-07-11          

我期待返回每个车辆列表最近ReturnToService如果车辆有一个,否则我想忽略它。

防爆结果:

VehicleRefNum | EventTypeCode | EventDate      
     3  | ReturnToService | 2016-04-21        
     1  | ReturnToService | 2017-07-11     

它看起来像我需要的是一个子查询的WHERE子句,但我真正需要的是一些帮助。谢谢!

编辑补充:

Select VehicleRefNum, EventTypeCode, EventDate 
From VehicleEvent 
where VehicleRefNum = 1 
and EventDate = Select max(EventDate) from VehicleEvent) 

工作,但只给了我,我在寻找解决方案的一半。我需要一个可以扩展更多车辆和事件的查询。

+0

提示:'WHERE'和'Group BY' –

+0

我不确定性能有什么区别,但是当对大量数据进行缩放时,您还可以尝试使用'ROW_NUMBER()OVER(PARTITION BY VehicleRefNum,EventTypeCode ORDER BY EventDate DESC)AS rn ..... WHERE rn = 1'。 – Shawn

+0

@Collat​​rl我注意到你不接受我的答案(看到我失去了代表)。你有问题吗? –

回答

3

试试这个:

SELECT VehicleRefNum, EventTypeCode, MAX(EventDate) EventDate 
FROM VehicleEvent 
WHERE EventTypeCode = 'ReturnToService' 
GROUP BY VehicleRefNum, EventTypeCode 

WHERE将结果限制为EventTypeCode你感兴趣然后从那里,你想ROLL结果上来就共同VehicleRefNum/EventTypeCode组合,你有做。 GROUP BY,并且每个只能看到MAX(EventDate)

相关问题