如何在postgresql

时间:2017-07-03 09:44:07

标签: ruby-on-rails database postgresql ruby-on-rails-4

我有一个问题。让我说我有两个表,一个是sol_items,另一个是sol_informations。 现在sol_itemssol_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

1 个答案:

答案 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的记录。