Обновить
1
0
Сергей@Keeper69rus

Аналитик

Отправить сообщение

Подумал над вашим комментарием, придумал еще способ:

Можно сделать рекурсивное CTE, в нем на основе условий in в искомом интервале собирать второй интервал в отдельное поле. Если интервал текущей записи внутри искомого, добавляем её ко второму интервалу.

А после, уже в основном запросе, вычесть из собранного в рекурсивном CTE интервала искомый и получить разрывы.

Но звучит как будто жестко в плане написания) но можно попробовать

Добрый день!

Если расскажите про IN-OUT, буду благодарен. Загуглил, не нашел.

Если вы про операторы in, out, то чтобы сравнивать, вам сначала нужно собрать диапазон, а поскольку записей с датами произвольное количество, получается мультидиапазон, datemultirange. И функции сравнения интервалов для datemultirange как раз <@

https://postgrespro.ru/docs/postgresql/14/functions-range

---

В теории можно придумать, как вы писали, рекурсию.

Как вариант, через lead искать следующую запись, пока записи не закончатся. Или делать вычитание из искомого диапазона каждой записи.

Но, опять же, если брать рекурсию, непонятно, чем это в части сложности будет отличаться от обычного lead/lag?

---

Про условие поиск конкретных интервалов описал в ограничениях. Опустил этот пункт для упрощения статьи, чтобы сравнить сами подходы.

---

В общем, если есть примеры или ссылки, буду благодарен :)

Сам додумался до таких вариантов только.

Варианты с циклом через T-SQL не рассматривал, своими процедурами и т.п.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность