2016-11-08 104 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