FMars
@FMars

Как сделать запрос SQL?

Есть две таблицы, Apartment и Apartment_Dates, в Apartment_Dates хранится информация в какой промежуток времени моя квартира недоступна (от arrival_time до departure_time), таких промежутков может быть много, например, квартира не доступна с (2014 по 2015) и с (2016 по 2017), тоесть квартира с (2015 по 2016) - доступна.
Подскажите, пожалуйста, как сделать запрос на выдачу доступных квартир по указанном отрезку времени.
У меня есть запрос (см. ниже), который выдает результат по дате, а нужно по отрезку времени, например: выдать все доступные с 2015-01-16 по 2015-03-12 год квартиры, а не доступные в 2015-01-16.
SELECT a.* FROM Apartment a
  LEFT JOIN Apartment_Dates ad
    ON ad.apartment_id=a.id AND ? BETWEEN ad.arrival_time AND ad.departure_time
  WHERE ad.id IS NULL

* за запрос спасибо @eandr_67
a014b6322f3848fead9cfb5f5bd17776.png
  • Вопрос задан
  • 2296 просмотров
Решения вопроса 1
-- Запрос на выборку всех квартир, свободных на определенную дату
SELECT * FROM Apartment a
WHERE NOT EXISTS (
    SELECT 1 FROM Apartment_Dates
    WHERE apartment_id = a.id AND ? BETWEEN arrival_time AND departure_time
);
-- Запрос на выборку всех квартир, свободных в определенный промежуток дат
SELECT * FROM Apartment a
WHERE NOT EXISTS (
    SELECT 1 FROM Apartment_Dates
    WHERE apartment_id = a.id AND 
        (arrival_time BETWEEN ? AND ? OR departure_time BETWEEN ? AND ?)
);
-- Запрос на выборку всех квартир, занятых в определенный промежуток дат
SELECT * FROM Apartment a
WHERE EXISTS (
    SELECT 1 FROM Apartment_Dates
    WHERE apartment_id = a.id AND 
        (arrival_time BETWEEN ? AND ? OR departure_time BETWEEN ? AND ?)
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы