Вам необходимо идентифицировать группы и затем агрегировать их по группам.
Простой способ - подсчитать количество ненулевых значений для каждого значения или после него.Это приводит к времени окончания:
select min(time), max(time)
from (select t.*,
sum(case when data > 0 then 1 else 0 end) over (order by time desc) as grp
from t
) t
group by grp
having min(data) = 0
order by min(time);
Здесь - это скрипта SQL.
Примечание: здесь используются оконные / аналитические функции, которые являются стандартным SQL, поддерживаемым большинством баз данных..