4

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

SELECT COUNT(DISTINCT date) FROM records

这仅返回日期列,但我想要所有列(名称、日期、年龄、created_at)列而不仅仅是日期。

谢谢你的帮助

4

4 回答 4

7

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

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

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

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

您使用 distinct 的事实意味着返回的每个“行”实际上代表n行,因此数据库不知道从n行中的哪一行中提取剩余的列。这就是为什么它只返回不同的列。它不能做其他...

于 2013-01-30T16:48:25.727 回答
5

我想这会对你有所帮助

Model.find(:all, :select => 'DISTINCT name, date, age, created_at')

请使用它并告诉我。

于 2012-04-26T06:27:13.863 回答
4
Model.group(:column)

对于您的情况:

Record.group(:date)

这将返回没有“日期”重复的所有列。

于 2013-10-08T23:56:26.380 回答
1

对于 rails 3.2 及更高版本,Model.select('DISTINCT name, date, age, created_at')

于 2014-04-17T07:10:24.890 回答