Календарь - график. Сложный SQL запрос

Visine

Новичок
Сложная выборка по диапазону дат.

Для начала опишу ситуацию.
Есть таблица рекламных конструкций следующего вида
----------------
| id | name |
----------------
Где id - уникальный номер конструкции, а name соотвественно ее наименование
Также есть табица в которой указаны периоды когда и какая конструкция занята
Таблица имеет следующий вид
-------------------------------------
| p_id | date_from | date_to |
-------------------------------------
p_id - номер конструкции
date_from - дата начала периода
date_to - дата окончания периода

Требуется по двум заданным датам определить какие конструкции свободны в этот период.
Притом методик поиска должно быть две.
Первая методика должна показывать только те конструкции которые полностью свободны в заданном интервале.
Вторая методика должна показывать конструкции которые хотябы один день (а лучше чтобы можно было задавать минимальное количество дней) свободны в заданном интервале.

Если у кого есть какие идеи или готовые решения поделитесь pls. За мною не заржавеет.
 

stillwaiting

Новичок
я бы делал от противного: нашел бы все, которые заняты, это просто. оставшиеся соответственно то, что нам надо:)
 

scandal

Новичок
Для первой методики
SELECT id FROM Table1 WHERE id NOT IN (SELECT p_id FROM Table2 WHERE date_to BETWEEN Date1 AND Date2)
Для второй методики
1. Находим все p_id, date_from которых строго в интервале Date1 и Date2.
2. Для каждой пары (p_id, date_from) из п.1 находим ближайшую пару (p_d, date_to), которая удовлетворяет условиям date_to<date_from AND первый p_id = второму p_id.
Если date_to>Date1, то конструкция с номером p_id - свободна.

Но проверьте все тщательно.

-~{}~ 26.07.08 12:42:

Тут одно условие. В date_from и date_to дни, без учета времени (часы, минуты) занятости конструкций.
 

Bitterman

Новичок
Visine
Конструкция свободна в заданном интервале если:
1. Нет периода начинающегося в заданном интервале
2. Нет периода заканчивающегося в заданном интервале.
3. Нет периода начинающегося до интервала, а заканчивающегося после.
Соответственно, эти три условия надо перевести в SQL
 

scandal

Новичок
Есть и 4-й момент. Для конкретного id может быть период, заканчивающийся в заданном интервале, и период, начинающийся
назавтра же в заданном интервале.
Что скажите?

P.S. то, что я писал 26-го июля, можно выбросить в мусор
 
Сверху