![]() |
|
Задача на поиск доступных интервалов для записи. | ☑ | ||
---|---|---|---|---|
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 минут. Каким образом решаются подобные задачи, и возможно ли её решение одним запросом? |
|||
1
Волшебник
17.03.24
✎
21:06
|
Используйте СКД
|
|||
2
Лирик
18.03.24
✎
08:46
|
Вам нужно соединить интервалы левым соединением сами с собой взяв Мин(Таб1.ДатаНачала) и Макс(Таб2.ДатаОкончания) где Таб2.ДатаОкончания = Таб1.ДатаНачала+(Таб2.НомерИнтервала-Таб1.НомерИнтервала)*&РазмерИнтервала. Получите "Не прерывающиеся" интервалы. Потом выберите из них те что подходят по длительности.
|
|||
3
Лирик
18.03.24
✎
08:45
|
Второй вариант:
Соединить левым соединением по Истина, сгруппировать по Таб1.ДатаНачала Как ДатаНачала, просуммировав КоличествоРазличные(Таб2.ДатаОкончания) Как КоличествоИнтервалов и взяв Макс(Таб2.ДатаОкончания) Как ДатаОкончания. Из результата выбрать ДатаОкончания = ДатаНачала+КоличествоИнтервалов*&РазмерИнтервала. Естетственно пользоваться ДОБАВИТЬКДАТЕ(ДатаНачала, Минута, КоличествоИнтервалов*&РазмерИнтервала) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |