create table PrinterData(
Dt DateTime not null,
Status nvarchar(50) not null
)
insert into PrinterData
values
('05.24.2019 00:00:00', 'READY'),
('05.24.2019 00:01:00', 'READY'),
('05.24.2019 00:02:00', 'NO PAPER'),
('05.24.2019 00:03:00', 'UNKNOWN'),
('05.24.2019 00:04:00', 'UNKNOWN'),
('05.24.2019 00:05:00', 'READY'),
('05.24.2019 00:06:00', 'READY'),
('05.24.2019 00:07:00', 'READY'),
('05.24.2019 00:08:00', 'NO PAPER'),
('05.24.2019 00:09:00', 'UNKNOWN'),
('05.24.2019 00:10:00', 'HAS PAPER'),
('05.24.2019 00:11:00', 'NO PAPER')
Мне нужно знать интервал времени между ГОТОВЫМ статусом и следующим ГОТОВЫМ или ИМЕЕТ БУМАГУ , кроме НЕИЗВЕСТНО статуса, НЕИЗВЕСТНО мне нужно пропустить.Результат должен выглядеть следующим образом:

Это мой запрос, но я не люблю использовать cross / external apply.С точки зрения производительности и скорости мне нужно ваше предложение, как изменить этот запрос.
select a.Dt, a.Status, b.Dt as Dt_Next_Status, b.Status as Next_Status, DATEDIFF(SECOND, a.Dt, b.Dt) as Diff from PrinterData a
outer apply
(
select top 1 Dt, Status from PrinterData where Dt > a.Dt and Status not in ('UNKNOWN', 'NO PAPER')
) b
where a.Status = 'NO PAPER'