小编典典

SQL Join获取最新记录

sql

我有三个表:

  • 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表格中选择一列(我需要更多)

有什么方法可以使用联接来完成此操作吗?

编辑 :即使它们在第一个事件之前,我也需要从测量表中选择所有条目(即,为连接选择空数据)


阅读 274

收藏
2021-04-28

共1个答案

小编典典

您可以使用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
2021-04-28