子供が多い親クラスがあります。子供たちは、重要な時刻情報をdate_time列に保持します。子どもがすべて私が定義している必要な基準を満たしている場合にのみ、親レコードを選択する方法min(children.start_time) > ? AND min(children.start_time) < ?, Time.now, Time.now.end_of_month + 2.month
PostgreSQLで特定の条件を満たしているすべての関連する子に基づいて親を選択する方法
私はすべての誤ったデータを返してきた多くのソリューションを試しました。私が試したものの一例:
Parent.where(is_active: true).joins("LEFT JOIN children ON parents.id = children.parent_id").group("parents.id").group("children.start_time").having("min(children.start_time) > ? AND min(children.end_time) < ?", Time.now, Time.now.end_of_month + 2.month)
このクエリでは、子供たちは私が後だものではありませんどのTime.nowより前の日付を開始した両親を私に戻っています。
いずれのポインタも大歓迎です。
ありがとうございました。私は 'グループ'と '持っている'とそれを理解しました。 Rubyで後で操作するよりも、DBでクエリを実行するほうがパフォーマンスが優れています。また、Postgresはそれが次のエラー 'PGを与える...あなたはどこで、分混在させません:: GroupingError:ERROR:集約関数は、私の例では何もルビーで処理されないであろうWHERE' – rorykoehler
で許可されていない、またはあなたが何をしましたか平均?私はPostgresで多くの集約関数を使用していません。うまくいくと助かりました – davidwessman
マージはRubyハッシュクラスのメソッドです。 はFYI:私はちょうどそれをベンチマークし、私は私の答えに掲載DBでの直接クエリは、提案マージ方式のアプローチよりも、ほぼ4倍高速です。 – rorykoehler