SQL Join to get most recent record

让人想犯罪 __ 提交于 2019-11-29 12:05:36

You can use 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 

Try something like this (not tested)

SELECT * FROM
(
    SELECT M.*, E.*, EV.EventDataID, EV.Type, EV.Value,
        Rank() over (Partition BY M.MeasureID order by M.Time - E.Time) as Rank
    FROM [Measure] M 
    INNER JOIN [Event] E ON M.Time >= E.Time
    INNER JOIN EventValues EV ON E.EventID = EV.EventID
) T
WHERE Rank = 1

EDIT

SELECT * FROM
(
    SELECT M.*, E.*, EV.EventDataID, EV.Type, EV.Value,
        Rank() over (Partition BY M.MeasureID order by M.Time - E.Time) as Rank
    FROM [Measure] M 
    LEFT JOIN [Event] E ON M.Time >= E.Time
    LEFT JOIN EventValues EV ON E.EventID = EV.EventID
) T
WHERE Rank = 1
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!