2016-11-08 8 views
0

私はそのテーブルに同じ名前のプロジェクトが複数あるかもしれませんが、created_atの月は異なります。私は自分のテーブルの各プロジェクトの最新のレコードを選択しようとしています。選択作品を使用して、しかし、私はレコードをループすることができますし、別の属性などの異なる属性を印刷することができますので、私はレコード全体が必要です。.distinctは一意のエントリを返しません

Project.distinct(::PROJECT_NAME)

私が試した - すべてのレコードを印刷します(これを確認するために、私はプロジェクト名をコピーして検索を行なったし、同じ名前を持つすべてのプロジェクトは、まだプリントアウトだろう)

Project.order(PROJECT_NAME:ASC、のcreated_at:DESC).uniq(:PROJECT_NAME) -

Project.select(上記と同じ結果:PROJECT_NAME).distinct - プルプロジェクトの名前だけを選択し、レコードの他のデータは選択しません。

+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

関連する問題