特定の日付範囲に重複するすべてのリストを検索しようとしていますが、期待どおりに機能していません。ID、start_date、end_date、listing_id を持つ「UnavailableDate」モデルがあります。私がこれまでに持っているものは次のとおりです。
@unavailable_listings = UnavailableDate.find_by_sql("SELECT listing_id, SUM((LEAST(extract(epoch FROM end_date), #{check_out.to_i}) - GREATEST(extract(epoch FROM start_date), #{check_in.to_i}))/86400) AS overlap FROM unavailable_dates GROUP BY listing_id")
これはある程度機能していますが、リストに複数の「UnavailableDate」がある場合、SUM は正しく機能しません。ただし、本当に必要なのは WHERE 句を追加することです。そのため、「重複」が X より大きいリストのみが検出されます。これにアプローチする最良の方法は何ですか?
基本的に、このクエリでリスティング ID の配列が得られるようにします。これをメインの Thinking Sphinx クエリの :without 句で使用できます (検索日の 50% 以上で利用できないすべてのリスティングを削除するため)。それを行うにはかなり非効率的な方法のように思えますが、それが私の唯一の選択肢だと思います
アドバイスをよろしくお願いします!