#sql #ruby-on-rails #postgresql #activerecord
Вопрос:
Учитывая модель Property
, которая has_many :property_events
. PropertyEvent
имеет a start_date
и an end_date
в качестве даты.
Я заинтересован в поиске вакансий или всех объектов недвижимости, у которых нет объекта недвижимости в течение выбранного периода времени.
Я попробовал следующее, но первое PropertyEvent
, которое существует в течение определенного периода времени, делает недействительными все возвращаемые свойства.
@properties.where('NOT EXISTS (:property_event)',
property_event: PropertyEvent.where("property_events.start_date <= ?",end_date).
where("property_events.end_date >= ?",start_date)
)
Есть какие-нибудь идеи?
Ответ №1:
Я думаю, то, что вы ищете, это:
@properties.where(
"NOT EXISTS(
SELECT 1 FROM property_events pe
WHERE (pe.start_date, pe.end_date) OVERLAPS (?, ?)
)",
start_date,
end_date
)