Here's a solution using recursion, don't expect it to be quick though.
WITH Ordered AS (
SELECT m.MACHINE_NUMBER,m.VALUE,m.EVENT_DATE,
ROW_NUMBER() OVER(PARTITION BY m.MACHINE_NUMBER ORDER BY m.EVENT_DATE) AS rn,
ca.VALUE AS NextVALUE,
ca.EVENT_DATE AS NextEVENT_DATE
FROM #MACHINE_LOG m
OUTER APPLY(SELECT TOP 1 m2.VALUE,m2.EVENT_DATE
FROM #MACHINE_LOG m2
WHERE m2.MACHINE_NUMBER = m.MACHINE_NUMBER AND m2.EVENT_DATE > m.EVENT_DATE
AND DATEDIFF(second,m.EVENT_DATE,m2.EVENT_DATE) > @interval_miuntes
ORDER BY m2.EVENT_DATE) ca
),
Recur AS (
SELECT MACHINE_NUMBER,VALUE,EVENT_DATE,NextVALUE,NextEVENT_DATE
FROM Ordered
WHERE rn=1
UNION ALL
SELECT o.MACHINE_NUMBER,o.VALUE,o.EVENT_DATE,o.NextVALUE,o.NextEVENT_DATE
FROM Ordered o
INNER JOIN Recur r ON r.MACHINE_NUMBER = o.MACHINE_NUMBER
AND r.NextVALUE = o.VALUE
AND r.NextEVENT_DATE = o.EVENT_DATE
)
SELECT MACHINE_NUMBER,VALUE,EVENT_DATE
FROM Recur
ORDER BY MACHINE_NUMBER,EVENT_DATE;
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537