Коллеги, есть интересная задача. Дан массив временных непересекающихся интервалов (ДатаНачала, ДатаОкончания). Нужно в запросе слить в один интервал те, между которыми разрыв не более 2х минут. Слить соседние я могу. Слить даже через один - это сразу понятно (от текущего смежный снизу и сверху), но если у меня 28 интервалов с разрывом не более минуты, то тут нужен цикл...
Мысль вертится, что можно собрать разрывы с продолжительностью и ссылками на смежные интервалы, прилепить к первому интервалу и брать дату конца максимального интервала, пока не встретим разрыв более 2х минут. Как-то так.
Буду признателен за помощь.
Реализация нужна запросом.
---
Решение нашлось.

```1c
    ВЫБРАТЬ
    Геозоны.ДатаНачала КАК ДатаНачала,
    Геозоны.ДатаОкончания КАК ДатаОкончания,
    АВТОНОМЕРЗАПИСИ() КАК Порядок
    ПОМЕСТИТЬ ВТГеозоны
    ИЗ
    &ТаблицаИнтервалов КАК Геозоны
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Геозоны1.Порядок КАК Порядок,
    Геозоны1.ДатаНачала КАК ДатаНачала,
    Геозоны2.ДатаНачала - Геозоны1.ДатаОкончания КАК Разрыв
    ПОМЕСТИТЬ ВТРазрывы
    ИЗ
    ВТГеозоны КАК Геозоны1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТГеозоны КАК Геозоны2
    ПО (Геозоны2.Порядок = Геозоны1.Порядок + 1)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Геозоны1.Порядок КАК Порядок,
    ЕСТЬNULL(МИНИМУМ(Разрывы.Порядок), МАКСИМУМ(Геозоны2.Порядок)) КАК ВерхнийРазрыв
    ПОМЕСТИТЬ ВТДопустимыеВерхниеРазрывы
    ИЗ
    ВТГеозоны КАК Геозоны1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТРазрывы КАК Разрывы
    ПО (Разрывы.Порядок >= Геозоны1.Порядок)
    И (Разрывы.Разрыв >= 120),
    ВТГеозоны КАК Геозоны2

    СГРУППИРОВАТЬ ПО
    Геозоны1.Порядок
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(ВТГеозоны1.ДатаНачала) КАК ДатаНачала,
    МАКСИМУМ(ВТГеозоны2.ДатаОкончания) КАК ДатаОкончания
    ИЗ
    ВТДопустимыеВерхниеРазрывы КАК ДопустимыеВерхниеРазрывы
    ЛЕВОЕ СОЕДИНЕНИЕ ВТГеозоны КАК ВТГеозоны1
    ПО (ВТГеозоны1.Порядок = ДопустимыеВерхниеРазрывы.Порядок)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТГеозоны КАК ВТГеозоны2
    ПО (ВТГеозоны2.Порядок = ДопустимыеВерхниеРазрывы.ВерхнийРазрыв)

    СГРУППИРОВАТЬ ПО
    ДопустимыеВерхниеРазрывы.ВерхнийРазрыв
```
---
10 минут подумал, порисовал. Без использования цикла не получается(((. Но достаточно быстро решается, если в цикле слить интервалы и уже слитые передавать для дальнейших нужд в запрос.
---
Сначала сортируешь массив, далее в цикле начинаешь сливать по 2 соседних, повторяешь слияние пока не останется что сливать
---
Пардон, забыл обозначить в тексте. Это надо сделать в запросе.
---
так в названии темы написано "Слить интервалы в запросе". Задача предельно понятна)
---
Решение нашлось.

```1c
    ВЫБРАТЬ
    Геозоны.ДатаНачала КАК ДатаНачала,
    Геозоны.ДатаОкончания КАК ДатаОкончания,
    АВТОНОМЕРЗАПИСИ() КАК Порядок
    ПОМЕСТИТЬ ВТГеозоны
    ИЗ
    &ТаблицаИнтервалов КАК Геозоны
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Геозоны1.Порядок КАК Порядок,
    Геозоны1.ДатаНачала КАК ДатаНачала,
    Геозоны2.ДатаНачала - Геозоны1.ДатаОкончания КАК Разрыв
    ПОМЕСТИТЬ ВТРазрывы
    ИЗ
    ВТГеозоны КАК Геозоны1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТГеозоны КАК Геозоны2
    ПО (Геозоны2.Порядок = Геозоны1.Порядок + 1)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Геозоны1.Порядок КАК Порядок,
    ЕСТЬNULL(МИНИМУМ(Разрывы.Порядок), МАКСИМУМ(Геозоны2.Порядок)) КАК ВерхнийРазрыв
    ПОМЕСТИТЬ ВТДопустимыеВерхниеРазрывы
    ИЗ
    ВТГеозоны КАК Геозоны1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТРазрывы КАК Разрывы
    ПО (Разрывы.Порядок >= Геозоны1.Порядок)
    И (Разрывы.Разрыв >= 120),
    ВТГеозоны КАК Геозоны2

    СГРУППИРОВАТЬ ПО
    Геозоны1.Порядок
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МИНИМУМ(ВТГеозоны1.ДатаНачала) КАК ДатаНачала,
    МАКСИМУМ(ВТГеозоны2.ДатаОкончания) КАК ДатаОкончания
    ИЗ
    ВТДопустимыеВерхниеРазрывы КАК ДопустимыеВерхниеРазрывы
    ЛЕВОЕ СОЕДИНЕНИЕ ВТГеозоны КАК ВТГеозоны1
    ПО (ВТГеозоны1.Порядок = ДопустимыеВерхниеРазрывы.Порядок)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТГеозоны КАК ВТГеозоны2
    ПО (ВТГеозоны2.Порядок = ДопустимыеВерхниеРазрывы.ВерхнийРазрыв)

    СГРУППИРОВАТЬ ПО
    ДопустимыеВерхниеРазрывы.ВерхнийРазрыв
```
---
Там пара неточностей была исправлена позже, но в целом запрос работает.