Я буду использовать mysql или postgresql.
Можно выбрать максимальную и минимальную метку времени каждого интервала по разделу 2?
например:
red block:2018-05-27 15:11:49~2018-05-27 15:11:54
green block:2018-05-27 15:11:55~2018-05-27 15:12:12
yellow block:2018-05-27 15:12:13~2018-05-27 15:12:16
Это проблема пробелов и островов. Я настоятельно рекомендую Postgres. Он легко решается с использованием разности номеров строк:
select section1, section2, min(datetime), max(datetime)
from (select t.*,
row_number() over (partition by section1 order by datetime) as seqnum_1,
row_number() over (partition by section1, section2 order by datetime) as seqnum_12
from t
) t
group by (seqnum_1 - seqnum_12);
Разница чисел строк идентифицирует интересующие вас разделы. Причина немного трудно объяснить, но если вы запустите подзапрос, вы увидите, что происходит - разница постоянна для каждого интересующего раздела.
Тот же код будет работать в MySQL 8.0. Однако более ранние версии MySQL не поддерживают функции окна, поэтому расчет намного сложнее.
seqnum_1
иseqnum_12
.