Запрос Модели, В Которой В Течение Выбранного Периода Времени Не Существует Событий

#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
)