Пропущенные периоды в интервале дат

1. nikson_1987 14.01.21 23:47 Сейчас в теме
Добрый день.
Подскажите, пожалуйста, как решить подобную задачу (неважно запросом, или нет).

Есть РС с датами, в нем записи
Дата начала Дата окончания
04.01.2020 - 08.01.2020
15.01.2020 - 20.01.2020
25.01.2020 - 30.01.2020

Есть период 01.01.2020-31.01.2020, в итоге хочу нужно такую таблицу "пропущенных" периодов

Дата начала Дата окончания
01.01.2020 - 03.01.2020
09.01.2020 - 14.01.2020
21.01.2020 - 24.01.2020
31.01.2020 - 31.01.2020

Спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TimoninD 15.01.21 02:57 Сейчас в теме
Добрый день! Тут все просто.... В обходе результата запроса с имеющимися периодами, нужно проанализировать значения.
1. Сначала (в первой итерации) "04.01.2020 - 08.01.2020" сравни общее начало периода "01.01.2020" с текущим значением начала периода "04.01.2020". Если не равны то создавай "Пропущенный период" "01.01.2020 - 03.01.2020" . Так же, запомни конец текущего периода "08.01.2020".
2. Далее (в следующих итерациях) сравнивай конец старого периода с началом следующего. "08.01.2020" и "15.01.2020". При необходимости, создавай пропущенный период "09.01.2020 - 14.01.2020".
3. По окончанию обхода запроса, сравни последнюю "Дату окончания периода" "30.01.2020" с "Общим концом периода" "31.01.2020". И при необходимости, создавай пропущенный период "31.01.2020 - 31.01.2020".
3. nikson_1987 15.01.21 13:02 Сейчас в теме
(2)
Спасибо большое, все получилось!
4. user868505 15.01.21 13:29 Сейчас в теме
можно сформировать таблицу календарных дат нужного периода (из регистра календарь, например, выбрать), соединить с нужным РС по датам, отобрать только "пустые" даты
а дальше сгруппировать их: например, в цикле пройти с проверкой на каждой итерации
первая дата - начало периода
следующая - если это след день, то пропускаем, если не след день - завершаем период на дата-1 и начинаем следующий текущей датой
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот