我的RoR应用程序中的表中有几个条目:
{id: 1, item_id: a, ...}
{id: 2, item_id: a, ...}
{id: 3, item_id: a, ...}
{id: 4, item_id: b, ...}
{id: 5, item_id: b, ...}
{id: 6, item_id: c, ...}
{id: 7, item_id: d, ...}
{id: 8, item_id: d, ...}
我想创建一个过滤 distinct item_id的查询,并返回第一个匹配的条目,以便结果为
{id: 1, item_id: a, ...}
{id: 4, item_id: b, ...}
{id: 6, item_id: c, ...}
{id: 7, item_id: d, ...}
使用时
select(:item_id).distinct
我无法访问条目的其他属性。如何实现这一目标?
答案 0 :(得分:1)
如果您只想获得每个item_id的最低ID,可以使用聚合查询来检索这些ID:
grouped_with_min_id = Model.group(:item_id).minimum(:id)
rows = Model.find(grouped_with_min_id.map(&:id))
这可能不是最有效的解决方案,因为它使用两个查询。但是其他方法可能需要您使用Model.find_by_sql
并编写自己的sql。
免责声明:我没试过。