В основном вам нужно предыдущее значение и накопленная сумма.SQLite не поддерживает оконные функции, так что это сложно.
select t.*,
(select t2.status
from t t2
where t2.agent = t.agent and t2.datescan < t.datescan
order by t2.datescan desc
limit 1
) as prev_status
from t;
Далее необходимо определить изменения и их совокупную сумму:
with tt as (
select t.*,
(select t2.status
from t t2
where t2.agent = t.agent and t2.datescan < t.datescan
order by t2.datescan desc
limit 1
) as prev_status
from t
)
select tt.*,
(select count(*)
from tt tt2
where tt2.agent = tt.agent and tt2.datescan < t.datescan and
tt2.status = 'NO' and tt2.prev_status = 'YES'
) as counter
from tt;