Задача заключается в том, чтобы собрать в один непрерывный интервал все время проживание гостя в гостинице, если между интервалами не было перерывов. То есть для таблицы
Это делает следующий запрос, являющийся развитием идей решения задачи 14 из предыдущей статьи на случай интервалов:
ВЫБРАТЬ
Дано.НачалоПериода,
Дано.КонецПериода,
Дано.Гостиница,
Дано.ФизическоеЛицо,
СУММА(РАЗНОСТЬДАТ(Слева.НачалоПериода, Слева.КонецПериода, ДЕНЬ) + 1) КАК Интеграл
ПОМЕСТИТЬ ДаноПлюс
ИЗ
Дано КАК Дано
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Слева
ПО (Слева.НачалоПериода <= Дано.НачалоПериода)
И Дано.Гостиница = ДаноСлева.Гостиница
И Дано.ФизическоеЛицо = ДаноСлева.ФизическоеЛицо
СГРУППИРОВАТЬ ПО
Дано.НачалоПериода,
Дано.КонецПериода,
Дано.Гостиница,
Дано.ФизическоеЛицо
;
ВЫБРАТЬ
МИНИМУМ(Дано.НачалоПериода) КАК НачалоПериода,
МАКСИМУМ(Дано.КонецПериода) КАК КонецПериода,
Дано.Гостиница,
Дано.ФизическоеЛицо
ИЗ
ДаноПлюс КАК Дано
СГРУППИРОВАТЬ ПО
ДОБАВИТЬКДАТЕ(Дано.КонецПериода, ДЕНЬ, -Дано.Интеграл),
Дано.Гостиница,
Дано.ФизическоеЛицо
Автор: ildarovich
Нахождение интервалов в запросе
Разбиение произвольного периода на интервалы в запросе
Объединение данных двух периодических регистров
Инвертирование периодов в запросе
Сжатое представление последовательности дат запросом
Получение интервалов неизменности курсов валют
ОбработчикиОбновленияВИнтервале (БСП)