0
ТДК
17.03.24
✎
20:36
|
Задача на поиск доступных интервалов для записи.
Сетка расписания для мастеров оказывающих услуги построена с шагом в 30 минут.
Клиент заказывает одну или несколько услуг.
Например: стрижка машинкой - 30 минут, стрижка бороды - 30 минут. Общее время затрат на такого клиента - 60 минут.
Задача: найти в расписании мастера временные слоты, удовлетворяющие времени затрат на клиента и предложить клиенту время для записи.
Имеем следующие вводные данные:
общее время оказания услуг - 60 минут.
Найти слоты доступные для записи
Строка Барбер ДеньРаботы ДатаНачала ДатаОкончания Продолжительность
1 "Барбер1"| 15.03.2024| 15.03.2024 7:00:00 | 15.03.2024 7:30:00 | 30
2 "Барбер1"| 15.03.2024| 15.03.2024 7:30:00 | 15.03.2024 8:00:00 | 30
3 "Барбер1"| 15.03.2024| 15.03.2024 8:00:00 | 15.03.2024 8:30:00 | 30
4 "Барбер1"| 15.03.2024| 15.03.2024 9:00:00 | 15.03.2024 9:30:00 | 30
5 "Барбер1"| 15.03.2024| 15.03.2024 10:00:00| 15.03.2024 10:30:00| 30
6 "Барбер1"| 15.03.2024| 15.03.2024 10:30:00| 15.03.2024 11:00:00| 30
7 "Барбер1"| 15.03.2024| 15.03.2024 12:00:00| 15.03.2024 12:30:00| 30
8 "Барбер1"| 15.03.2024| 15.03.2024 13:00:00| 15.03.2024 13:30:00| 30
Для клиента, подходящее время для записи в строках 1,2,3,5 так временные интервалы следуют друг за другом и доступное время мастера достаточно для выполнения услуг на 60 минут.
Строка 4 не подходит, так как окно только на 30 минут, а интервал между недоступен для записи.
строка 7 не удовлетворяет требуемому времени записи. доступно только для услуги в 30 минут, а следующая запись начинается с 13 часов
строка 8 также доступна только на 30 минут.
Каким образом решаются подобные задачи, и возможно ли её решение одним запросом?
|
|
3
Лирик
18.03.24
✎
08:45
|
Второй вариант:
Соединить левым соединением по Истина, сгруппировать по Таб1.ДатаНачала Как ДатаНачала, просуммировав КоличествоРазличные(Таб2.ДатаОкончания) Как КоличествоИнтервалов и взяв Макс(Таб2.ДатаОкончания) Как ДатаОкончания.
Из результата выбрать ДатаОкончания = ДатаНачала+КоличествоИнтервалов*&РазмерИнтервала.
Естетственно пользоваться ДОБАВИТЬКДАТЕ(ДатаНачала, Минута, КоличествоИнтервалов*&РазмерИнтервала)
|
|