[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Разговоры ни о чём

Модератор: vadim64

_proftpd
проходил мимо

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение _proftpd » 2017-05-16 15:21:59

Здравствуйте, требуется помощь

Даны диапазоны разных дат, в диапазон могут входить даты с разных месяцев. (Это диапазон свободных дат, которые свободные в данный момент)

задача: найти диапазон свободных дат по указанному промежутку дат 2017-04-10 - 2017-04-13 или другой промежуток

Я ума не приложу как это сделать. Может подсказать?

Это НЕ задача в универе, это реальная задача :)

пример:

Код: Выделить всё

+-------+---------+------------+------------+
| city | id  | to     | from   |
+-------+---------+------------+------------+
|    15 |   1 | 2017-04-16 | 2017-04-16 |
|    15 | 2 | 2017-04-16 | 2017-04-16 |
|    15 | 3 | 2017-04-14 | 2017-04-14 |
|    15 | 3 | 2017-04-14 | 2017-04-14 |
|    15 | 3 | 2017-04-14 | 2017-04-14 |
|    15 | 4 | 2017-04-14 | 2017-04-14 |
|    15 | 5 | 2017-04-14 | 2017-04-14 |
|    15 | 6 | 2017-04-14 | 2017-04-14 |
|    15 | 7 | 2017-04-14 | 2017-04-14 |
|    15 | 8 | 2017-04-14 | 2017-04-14 |
|    15 | 9 | 2017-04-15 | 2017-04-15 |
|    15 | 9 | 2017-04-22 | 2017-04-16 |
|    15 | 10 | 2017-04-15 | 2017-04-15 |
|    15 | 10 | 2017-04-22 | 2017-04-16 |
|    15 | 11 | 2017-04-15 | 2017-04-15 |
|    15 | 11 | 2017-04-22 | 2017-04-16 |
|    15 | 22 | 2017-04-15 | 2017-04-15 |
|    15 | 22 | 2017-04-22 | 2017-04-16 |
|    15 | 23 | 2017-05-31 | 2017-04-15 |
|    15 | 24 | 2017-04-30 | 2017-04-15 |
+-------+---------+------------+------------+

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение Neus » 2017-05-16 17:07:26

Я вижу тут 4 ситуации:
1. Промежуток равен диапазону
2. Промежуток уже диапазона
3. Промежуток шире диапазона
4. Промежуток пересекается с диапазоном
В математической нотации лень писать :)
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение Alex Keda » 2017-05-16 23:07:12

на mysql, судя по виду образца?
перебором, если производительность не важна
Убей их всех! Бог потом рассортирует...

proftpd
проходил мимо

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение proftpd » 2017-05-18 1:14:39

Neus писал(а):Я вижу тут 4 ситуации:
1. Промежуток равен диапазону
2. Промежуток уже диапазона
3. Промежуток шире диапазона
4. Промежуток пересекается с диапазоном
В математической нотации лень писать :)


нужны как раз все ситуации которые Вы перечислили

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение Neus » 2017-05-18 7:57:29

proftpd писал(а):
Neus писал(а):Я вижу тут 4 ситуации:
1. Промежуток равен диапазону
2. Промежуток уже диапазона
3. Промежуток шире диапазона
4. Промежуток пересекается с диапазоном
В математической нотации лень писать :)


нужны как раз все ситуации которые Вы перечислили

в общем это пересечение множеств надо найти
обозначим границы промежутка как LB и RB, где LB <= RB
получается эти множества пересекаются когда:
From <= RB and LB <= To
т.е.:
select * from table
where From <= RB and LB <= To
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

snorlov
подполковник
Сообщения: 3565
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение snorlov » 2017-05-18 9:27:29

Может быть просто тупо временную таблицу заполнить всеми датами из промежутка, после чего удалить все даты, которые уже имеются...

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

[Даты, время] Поиск свободных дат в свободных диапазонах - Алгоритмы

Непрочитанное сообщение Neus » 2017-05-18 13:06:56

snorlov писал(а):Может быть просто тупо временную таблицу заполнить всеми датами из промежутка, после чего удалить все даты, которые уже имеются...

и каков будет результат?
например есть рекорд с диапазоном 10-20, а промежуток задан 12-18 -- в итоге пустой список...
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн


Вернуться в «/dev/null»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость