Comments 2
Вот здесь (Простой способ индексирования интервалов) описан, на мой взгляд, «полезный нетривиальный алгоритм работы с отрезками для решения бизнес-задач».
Спасибо, в тему, да.
Чем-то похоже на вариант, как мы у себя реализовывали поиск интервалов через btree, опираясь на тот факт, что их разных «длин» обычно мало (особенно, когда она измеряется «в днях»).
Как правило, если отпуск — то день, неделя, две или сразу месяц, если больничный — то неделя, если декрет — то сколько по закону положено, и т.д.
В результате, делаем индекс
Чем-то похоже на вариант, как мы у себя реализовывали поиск интервалов через btree, опираясь на тот факт, что их разных «длин» обычно мало (особенно, когда она измеряется «в днях»).
Как правило, если отпуск — то день, неделя, две или сразу месяц, если больничный — то неделя, если декрет — то сколько по закону положено, и т.д.
В результате, делаем индекс
btree(dte - dtb, dtb)
и, перебирая в unnest-цикле рекурсивно найденные DISTINCT-длины, для каждой из них ищем примерно так: dte - dtb = unnest_const AND dtb BETWEEN p - (dte - dtb) AND p
.Sign up to leave a comment.
PostgreSQL Antipatterns: работаем с отрезками в «кровавом энтерпрайзе»