誰でも次のSQL文をRailsに書き込む方法を理解できますか?Rails Activerecord Relation:サブクエリをSQLジョインのテーブルとして使用する
SELECT * FROM shifts a
INNER JOIN (
SELECT shifts.date, shifts.time, max(shifts.barber_id) as 'barber_id'
FROM shifts
WHERE shifts.date = '2017-09-06' and shifts.is_free = true
GROUP BY shifts.date, shifts.time
) b
ON a.date = b.date AND a.time = b.time AND a.barber_id = b.barber_id
WHERE a.`is_free` = true AND a.date = '2017-09-06'
どこ-条件は、私は次のようにスコープを使用していサブクエリとメイン・クエリで同じなので:
scope :grouped_shifts, -> { select("date, time, max(barber_id) as barber_id").group(:date, :time).available }
:私もサブクエリのスコープを作成しました
scope :available, -> { where('shifts.is_free', true).where('shifts.date', '2017-09-06').order(date: :desc, time: :asc) }
しかし、私はメソッドを結合するスコープをチェーンする方法を見つけることができません。それを議論として渡すことはできますか?このようなスコープは使用しないでください:
scope :something, -> { joins(self.grouped_shifts).available }
事前にお世話になりました!あなたは、あなたの質問にし、あなたの質問にあなたの最初のコメントで言ったこと一緒に組み合せる
SQLを見ると、クエリ全体の結果がどのような結果になるかはわかりません内側のクエリ私のテーブルの –
私は同じ日付と時間で、しかし異なるbarber_idフィールドを持ついくつかのレコードを持っています。私がしようとしているのは、テーブルをフィルタリングし、日付と時刻の各グループでbarber_idの最大値を持つ行のみを選択することです。このグループ内では、一意のレコードが1つだけです。 –