Непересекающиеся отрезки. Решение
Задача: постановка в посте вторника.
Решение:
Суть: необходимо проверять границы отрезков. Можно решить задачу ”в лоб”. Расписать все кейсы, когда новый отрезок заходит одной границей на начало отрезка в таблице, когда другой и т.д. Получится огромная “портянка” из условий.
Можно пойти от обратного (см. рисунок)
Достаточно проверить, что b2 > a and a2 < b;
Итоговый запрос:
select count(1)
from (select 1 client_id,
date'2022-01-10' d_from,
date'2022-01-12' d_till
from dual) e
join client_tariff t
on t.client_id = e.client_id
and e.d_till > t.date_from
and e.d_from < t.date_till;
В моей практике, подобная задача периодически возникала в рабочих кейсах.
И один раз на собеседовании в Яндексе. Правда, там задача с отрезками еще более замороченная. Но если вы поймете принцип этого решения, значит сможете сообразить как решаются подобные задачи.
Обсудить в чатике
#решениезадачи #яндекс #отрезки