Вы можете попробовать следующий запрос, используя задержку, как показано ниже
create table #temp (id int identity (1,1), times datetime, gps_speed decimal(18,2),I2 int, stat varchar(20), row_num int)
insert into #temp values
('2018-12-14', 18.52, 1, 'running', 4),
('2018-12-14', 0, 1, 'idle', 5),
('2018-12-14', 24.08, 1, 'running', 6),
('2018-12-14', 37.04, 1, 'running', 29),
('2018-12-14', 0, 1, 'idle', 30),
('2018-12-14', 0, 1, 'idle', 32),
('2018-12-14', 18.52, 1, 'running', 37),
('2018-12-14', 35.19, 1, 'running', 41),
('2018-12-14', 16.67, 1, 'running', 42),
('2018-12-14', 0, 1, 'idle', 43),
('2018-12-14', 0, 1, 'idle', 44)
select * from (
select
lag(stat, 1) OVER(ORDER BY [id]) as Prev,*
from #temp
)a where Prev <> stat
and Prev = 'idle' or Prev is null
Вывод такой, как показано ниже
Prev id times gps_speed I2 stat row_num
NULL 1 14.12.2018 00:00:00 18,52 1 running 4
idle 3 14.12.2018 00:00:00 24,08 1 running 6
idle 7 14.12.2018 00:00:00 18,52 1 running 37
Вот демонстрационная версия в реальном времени - Демо <> Предыдущее значение