按Rails 3中的唯一列值选择所有列

Ana*_*mar 4 ruby activerecord ruby-on-rails ruby-on-rails-3

在Rails 3中,如何根据唯一列值选择行,我需要获取所有列,例如:

SELECT COUNT(DISTINCT date) FROM records
Run Code Online (Sandbox Code Playgroud)

这只返回日期列,但我希望所有列(name,date,age,created_at)列不仅仅是日期.

谢谢你的帮助

Tro*_*roy 7

这里的问题是,根据定义,可能有多个记录具有相同的日期.它需要用户空间中的逻辑来确定具有唯一日期的多个记录中的哪一个使用.以下是获取这些行的一些代码:

Record.select("distinct date").each do |record|
    records = Record.find_by_date record.date
    puts records.count # do something with the records
end
Run Code Online (Sandbox Code Playgroud)

如果您真正关注的是多列之间的唯一性,请列出不同查询中的所有相关列:

Record.select("distinct date, name, age, created_at").each do |record|
    puts record.date
    puts record.name
    puts record.age
    puts record.created_at
    # ``record'' still represents multiple possible records
end
Run Code Online (Sandbox Code Playgroud)

您使用distinct的事实意味着返回的每个"行"实际上代表n行,因此DB不知道从哪个n行拉出剩余的列.这就是为什么它只返回distinct中使用的列.它没有别的......


urj*_*ils 5

我想这会对你有所帮助

Model.find(:all, :select => 'DISTINCT name, date, age, created_at')
Run Code Online (Sandbox Code Playgroud)

请使用它,让我知道.