"Вывернуть" периоды в запросе. Есть запрос с выборкой периодов исключения: ДатаНачалаИсключения - ДатаОкончанияИсключения, а также основной период ДатаНачалаОсновная - ДатаОкончанияОсновная. Нужно составить запрос так, чтобы образовались периоды на основании основного периода, в которые не входят периоды исключения. Здесь используется тот факт, что при сквозной нумерации упорядоченных краев интервалов, края одного и того же интервала будут иметь номера, одинаковые при делении на два нацело.
Автор: ildarovich
ВЫБРАТЬ
&ДатаНачалаОсновная КАК Дата
ПОМЕСТИТЬ Даты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(Дано.ДатаНачалаИсключения, ДЕНЬ, -1)
ИЗ
Дано КАК Дано
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(Дано.ДатаОкончанияИсключения, ДЕНЬ, 1)
ИЗ
Дано КАК Дано
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
&ДатаОкончанияОсновная
;
ВЫБРАТЬ
МИНИМУМ(Даты.Дата) КАК ДатаНачала,
МАКСИМУМ(Даты.Дата) КАК ДатаОкончания
ИЗ
(ВЫБРАТЬ
КОЛИЧЕСТВО(Раньше.Дата) КАК Номер,
Даты.Дата КАК Дата
ИЗ
Даты КАК Раньше
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
ПО Раньше.Дата <= Даты.Дата
СГРУППИРОВАТЬ ПО
Даты.Дата) КАК Даты
СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(Даты.Номер / 2 КАК ЧИСЛО(10, 0))
{} Ожидается идентификатор
Нахождение интервалов в запросе
Получить даты за период в запросе
ПодключитьТестовыйПериод (БСП)
ПодключениеТестовыхПериодов_ПроверитьСостояниеЗапроса (БСП)
ПроверитьСостояниеЗапроса (БСП)
Разбиение произвольного периода на интервалы в запросе
Средневзвешенный курс валюты за указанный период