edhog
edhog

Reputation: 513

.distinct not returning unique entries

I have a table of Projects, in that table, there may be the same project multiple times with the same name, however the created_at month will be different. I'm trying to select the most recent record of each project in my table. Using select works, however I need the entire record so that then I can loop through the records and print out different attributes eg price or what not.

I've tried:

Project.distinct(:project_name) – Prints all records (to check this I copied the project name and did a find and all projects with the identical name would still print out)

Project.order(project_name: :asc, created_at: :desc).uniq(:project_name) – Same result as above

Project.select(:project_name).distinct – Pulls only 1 of each, however it only selects the project name and no other data from the record.

Upvotes: 1

Views: 1766

Answers (1)

dnsh
dnsh

Reputation: 3633

This is the case where DISTINCT ON comes to rescue.

This should work:

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

for selecting only particular columns specify them instead of *.

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

Upvotes: 4

Related Questions