2017-07-03 11 views
-1

私は問題があります.2つのテーブルがあるとしましょうかsol_itemsもう1つはsol_informationsです。 sol_itemsには、sol_informationsテーブルに関連するレコードが多数あります。 私は、最新のsol_informationsのレコードを、 'sol_items'ごとに1つのクエリを使用して取得したいと考えています。postgresqlで複雑なクエリを書く方法

sol_itemsテーブルに3つのレコードがあり、それぞれのレコードにsol_informationsという3つの関連レコードがあるとします。 sol_informationsに関連付けられているsol_itemsのそれぞれについて、sol_informationstableの最新のレコードが正確に必要です。

私は

select * from solbox_informations where(sol_item_id in (1,2,3)) LIMIT 1 

の下にしようとしている。しかし、これは唯一のsol_itemsテーブルの最初の要素ごとに1つのレコードを返します。 LIMITの値を増やすことはできません。

誰かが適切なクエリで私を助けることができますか?

sol_items表の列

id, name 

sol_informaitons表の列

id, name, amount, sol_item_id 
+0

あなたは私が思っている参加を探しています。テーブル構造 –

答えて

1

あなたはサブクエリが必要になります。

SolInformaiton.where(id: SolInformaiton.group(:sol_item_id).maximum(:id).values) 

説明:

ids = SolInformaiton.group(:sol_item_id).maximum(:id).values 

意志グループSolInformaiton内のすべてのレコードsol_item_idによると、IDの最大値を有する各グループ(最新)から1つのレコードを選択します。 sole_item_idをキーとし、idを値として返すActiveSupport::OrderedHashを返します。したがって、.valuesは必要なIDの配列を返します。

SolInformaiton.where(id: ids) 

idが配列で配列されたレコードを返す単純なクエリです。

+0

を開示してください。このクエリを説明してください。 – monsur

+0

更新された回答を確認してください –

+0

あなたの答えを受け入れました。 – monsur