Страница 1 из 1

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

Добавлено: 2017-05-16 15:21:59
_proftpd
Здравствуйте, требуется помощь

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

задача: найти диапазон свободных дат по указанному промежутку дат 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 |
+-------+---------+------------+------------+

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

Добавлено: 2017-05-16 17:07:26
Neus
Я вижу тут 4 ситуации:
1. Промежуток равен диапазону
2. Промежуток уже диапазона
3. Промежуток шире диапазона
4. Промежуток пересекается с диапазоном
В математической нотации лень писать :)

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

Добавлено: 2017-05-16 23:07:12
Alex Keda
на mysql, судя по виду образца?
перебором, если производительность не важна

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

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

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

Добавлено: 2017-05-18 7:57:29
Neus
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

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

Добавлено: 2017-05-18 9:27:29
snorlov
Может быть просто тупо временную таблицу заполнить всеми датами из промежутка, после чего удалить все даты, которые уже имеются...

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

Добавлено: 2017-05-18 13:06:56
Neus
snorlov писал(а):Может быть просто тупо временную таблицу заполнить всеми датами из промежутка, после чего удалить все даты, которые уже имеются...
и каков будет результат?
например есть рекорд с диапазоном 10-20, а промежуток задан 12-18 -- в итоге пустой список...