2016-11-08 54 views
0

我有一个项目表,在该表中,可能有多个相同的项目具有相同的名称,但created_at月将有所不同。我试图选择表格中每个项目的最新记录。使用选择作品,但是我需要整个记录,以便我可以遍历记录并打印出不同的属性,例如价格或不是什么。.distinct不返回唯一的条目

我已经试过:

Project.distinct(:PROJECT_NAME) - 打印所有记录(以检查这个我复制项目的名称,做了查找和使用相同名称的所有项目仍然会打印出)

Project.order(PROJECT_NAME:ASC,created_at:降序).uniq(:PROJECT_NAME) - 同样的结果如上述

Project.select(:PROJECT_NAME).distinct - 拉每个只有1个,但是它只选择项目名称而没有其他记录中的数据。

+0

正确,'.select'只抓取列出的字段名称。 – Eric

回答

2

这是DISTINCT ON来营救的情况。

这应该工作:

Project.select("DISTINCT ON (project_name) *").order("project_name, created_at DESC") 

仅选择特定列指定它们,而不是*

Project.select("DISTINCT ON (project_name) project_name, created_at, price").order("project_name, created_at DESC") 
+0

这个伎俩。谢谢Dnsh。现在奇怪的是,在创建var my_projects来存储选择的项目之后,我调用了.sum(:budget_margin) - 而不是仅仅添加这些项目,它仍然会加起来。我通过列循环和var只包含独特的项目,所以我不知道它是如何获得所有项目,并将其添加。 – edhog