Объединение пересекающихся периодов в запросе

FastCode 63 8

Требуется объединить перекрывающиеся периоды. Например, шесть периодов 01.01.16 - 10.03.16; 01.02.16 - 20.03.16; 30.03.16 - 15.04.16; 10.04.16 - 12.04.16; 11.04.16 - 25.04.16; 30.04-16 - 10.05.16 должны объединиться в три 01.01.16 - 20.03.16; 30.03.16 - 25.04.16; 30.04-16 - 10.05.16

Автор: ildarovich

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Край.От
ПОМЕСТИТЬ ЛевыеКрая
ИЗ
    Интервалы КАК Край
        ЛЕВОЕ СОЕДИНЕНИЕ Интервалы КАК Интервалы
        ПО (Интервалы.От < Край.От)
            И Край.От <= Интервалы.До
ГДЕ
    Интервалы.От ЕСТЬ NULL 
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Край.До
ПОМЕСТИТЬ ПравыеКрая
ИЗ
    Интервалы КАК Край
        ЛЕВОЕ СОЕДИНЕНИЕ Интервалы КАК Интервалы
        ПО (Интервалы.От <= Край.До)
            И Край.До < Интервалы.До
ГДЕ
    Интервалы.От ЕСТЬ NULL 
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ЛевыеКрая.От,
    МИНИМУМ(ПравыеКрая.До) КАК До
ИЗ
    ЛевыеКрая КАК ЛевыеКрая
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПравыеКрая КАК ПравыеКрая
        ПО ЛевыеКрая.От <= ПравыеКрая.До

СГРУППИРОВАТЬ ПО
    ЛевыеКрая.От
{2} Ожидается идентификатор
Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз

Похожие публикации

Объединение непересекающихся интервалов в запросе

Инвертирование периодов в запросе

Разбиение произвольного периода на интервалы в запросе

Средневзвешенный курс валюты за указанный период

Срез на даты за период. Шаблон запроса

Модератору