2015-05-18 3 views
2

У меня есть заказы на таблицу свойств, схемы являются:Выберите диапазон дат между заказом

property_id, start_date, end_date 

Это имеет список идентификаторов свойств (ссылки в другой таблице) и start_date и end_date каждого бронирования каждое свойство.

То, что я пытаюсь выполнить, - это запрос, который отобразит все свойства (DISTINCT), доступные для 7-дневного пребывания в течение следующих 28 дней.

Я не могу понять, как я начну структурировать этот запрос.

ответ

1

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

Быстрый пример, чтобы вы начали (отсутствующий в течение 28 дней состояния и не гарантируют работу в каждом конкретном случае):

create table bookings(id int, start datetime, finish datetime); 

insert into bookings values (1, '2015-05-18','2015-05-23'); 
insert into bookings values (1, '2015-05-25','2015-06-01'); 
insert into bookings values (2, '2015-05-18','2015-05-29'); 
insert into bookings values (2, '2015-06-15','2015-06-21'); 

select distinct a.id 
from bookings a cross join bookings b 
where 
a.id = b.id and a.start != b.start and datediff(a.start,b.finish) >= 7; 
+0

Я дошел до 'SELECT DISTINCT FROM a.property_id доступности с перекрестной JOIN Доступность b WHERE a.property_id = b.property_id AND a.start_date! = B.start_date И датифик (a.start_date, b.end_date)> = 7 И a.start_date <СЕЙЧАС() + INTERVAL 28 ДЕНЬ И a.end_date > СЕЙЧАС() + ИНТЕРВАЛ 28 ДЕНЬ, 'который возвращает результаты .... но не правильные ?! –

Смежные вопросы