Это своего рода проблема пробелов и островков. Вы можете сделать сумму окна для определения групп: игнорируя ign
s, которые равны null
s, новая группа запускается каждый раз, когда встречается 1
.
Для вашего набора данных следующий запрос будет получить ожидаемые результаты:
select 1 start, min(time) startTime, 0 stop, max(time) stopTime
from (
select t.*, sum(ign) over(order by time) grp
from mytable t
where ign is not null
) t
group by grp
Обратите внимание, что оконные функции были добавлены в MySQL 8.0.
Демонстрация на DB Fiddle :
start | startTime | stop | stopTime
----: | :-------- | ---: | :-------
1 | 12:31 | 0 | 12:35
1 | 12:38 | 0 | 12:42