我有一个问题。让我说我有两个表,一个是sol_items
,另一个是sol_informations
。
现在sol_items
在sol_informations
表中有许多相关记录。
我想使用单个查询获取每个'sol_items'的最新sol_informations
相关记录。
所以假设我在sol_items
表中有3条记录,每条记录在sol_informations
中有3条相关记录。
现在,我希望与sol_items
相关联的每个sol_informations
的thesol_informationstable都有最新记录。
我在下面试过
select * from solbox_informations where(sol_item_id in (1,2,3) ) LIMIT 1
但是这只返回sol_items
表的第一个元素的一条记录。
你不能增加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
分组,并从每个组中选择1条记录,其中最大值为id(最新)。它将返回ActiveSupport::OrderedHash
,其中sole_item_id
为关键字,id
为值,因此.values
将返回所需ID的数组。
SolInformaiton.where(id: ids)
这是一个简单的查询,它将返回带有数组中ID的记录。