我有三个表:
Measurements (MeasureID, Time, Distance, Value)
Events(EventID, Time Value)
EventValues (EventDataID, EventID, Type, Value)
我需要获取每次测量的最新事件(过去的事件)及其相关的eventvalues数据。
我当前的查询很丑陋:
SELECT M.*, (SELECT TOP 1 EV.value FROM [Event] E JOIN EventValues EV ON E.EventID = EV.EventID WHERE M.Time >= E.Time ORDER BY M.Time-E.Time) AS Data, FROM [Measure] M ORDER BY M.Distance
而且只允许我从EventValues表格中选择一列(我需要更多)
EventValues
有什么方法可以使用联接来完成此操作吗?
编辑 :即使它们在第一个事件之前,我也需要从测量表中选择所有条目(即,为连接选择空数据)
您可以使用CROSS APPLY。
SELECT M.*, Data.* FROM [Measure] M CROSS APPLY (SELECT TOP 1 EV.* FROM [Event] E JOIN EventValues EV ON E.EventID = EV.EventID WHERE M.Time >= E.Time ORDER BY E.Time DESC) AS Data ORDER BY M.Distance