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

Модератор: Модераторы разделов

Ответить
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT
Контактная информация:

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

Сообщение gcc »

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

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

задача: найти диапазон свободных дат по указанному промежутку дат 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 |
+-------+---------+------------+------------+ 
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

gcc писал(а):
16.05.2017 15:07
найти диапазон свободных дат по указанному промежутку дат

Не понял, надо найти диапазон из таблицы, который бы целиком помещался в заданный промежуток? Или наоборот, диапазон должен вмещать этот промежуток? В любом случае задача решается сравнением верхних и нижних границ, только знак сравнения меняется.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT
Контактная информация:

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

Сообщение gcc »

да, нужно найти даты которые входят в промежуток.

Я раздуплился, я сделал проще:

WHERE (DATE(from) <= '2017-04-20' AND DATE(to) >= '2017-04-22')

таким образом оно выберет даты в свободном диапазоне который есть.

Я думаю что будет верно.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

gcc писал(а):
16.05.2017 16:12
я сделал проще

Ровно это я и имел в виду. ☺
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT
Контактная информация:

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

Сообщение gcc »

сейчас задача когда в один диапазон может входить несколько диапазонов

есть какой-то пример реализации в этом контексте?

вариант 1
т.е. надо искать диапазон:

2017-08-01 по 2017-08-05

среди диапазонов:
2017-08-01 по 2017-08-02
2017-08-01 по 2017-08-03
2017-08-05 по 2017-08-05
2017-08-01 по 2017-08-30
2017-08-01 по 2017-08-20



вариант 2
т.е. надо искать диапазон:

2017-08-01 по 2017-08-05

среди диапазонов:
2017-08-01 по 2017-08-02
2017-08-01 по 2017-08-03
2017-08-05 по 2017-08-05
2017-08-01 по 2017-08-30
2017-08-01 по 2017-08-20
2017-08-20 по 2017-08-20


Синим цветом я выделил то что не правильно


Пробовать как-то в тупую перебрать, да? можно мозг поломать :)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

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

Сообщение NickLion »

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

(DATE(from) BETWEEN start AND end) AND (DATE(to) BETWEEN start AND end)
Спасибо сказали:
Ответить