declare @DeviceStatuses table( [DeviceStatusID] INT IDENTITY (1, 1) NOT NULL, [DeviceID] INT NOT NULL, [StatusTime] DATETIME NULL, [ResponseTime] INT NULL) Insert into @DeviceStatuses([DeviceID],[StatusTime],[ResponseTime]) Values (1,'20120101 10:10',2),(1,'20120101 10:12',NULL),(1,'20120101 10:14',2), (1,'20120102 10:10',2),(1,'20120102 10:12',NULL),(1,'20120102 10:14',2), (2,'20120101 10:10',2),(2,'20120101 10:12',NULL),(2,'20120101 10:14',2), (2,'20120101 10:19',2),(2,'20120101 10:20',NULL),(2,'20120101 10:21',NULL),(2,'20120101 10:22',2), (2,'20120102 10:10',2),(2,'20120102 10:12',NULL),(2,'20120102 10:14',2); Select [DeviceID],MIN([StatusTime]) as StartDown,MAX([StatusTime]) as EndDown from ( Select [DeviceID],[StatusTime] ,(Select MAX([StatusTime]) from @DeviceStatuses s2 where s2.DeviceID=s1.DeviceID and s2.StatusTime<s1.StatusTime and s2.ResponseTime is not null) as gr from @DeviceStatuses s1 where s1.ResponseTime is null )a Group by [DeviceID],gr order by [DeviceID],gr