Try this
WITH Starts AS (
SELECT a.StationID,a.dtmStart,
ROW_NUMBER() OVER(PARTITION BY a.StationID ORDER BY a.dtmStart) AS rn
FROM @Events a
WHERE NOT EXISTS(SELECT * FROM @Events b
WHERE b.StationID = a.StationID
AND b.dtmEnd = a.dtmStart)),
Ends AS (
SELECT a.StationID,a.dtmEnd,
ROW_NUMBER() OVER(PARTITION BY a.StationID ORDER BY a.dtmEnd) AS rn
FROM @Events a
WHERE NOT EXISTS(SELECT * FROM @Events b
WHERE b.StationID=a.StationID
AND b.dtmStart = a.dtmEnd))
SELECT s.StationID,s.dtmStart,e.dtmEnd
FROM Starts s
INNER JOIN Ends e ON e.StationID=s.StationID
AND e.rn=s.rn
INNER JOIN @Events t ON t.StationID=s.StationID
AND t.dtmStart BETWEEN s.dtmStart AND e.dtmEnd
GROUP BY s.StationID,s.dtmStart,e.dtmEnd
HAVING COUNT(*) > 1
ORDER BY s.StationID,s.dtmStart,e.dtmEnd;
____________________________________________________
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