2012-04-25 79 views
4

在Rails 3,我如何基於獨特的列值選擇行,我需要得到所有的列如:Rails中選擇一個獨特的列值的列3

SELECT COUNT(DISTINCT date) FROM records 

這隻返回日期列,但我想所有列(名稱,日期,年齡,created_at)列不只是日期。

感謝您的幫助

+3

但如果兩行具有相同的日期,你想要哪一行? – 2012-04-25 21:47:40

+1

你怎麼實際上運行查詢首先 – Jonathan 2012-04-25 23:09:05

回答

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 

,你是事實使用不同意味着每個「行」返回實際上代表n行,所以DB不知道哪個行要從其餘列中拉出來。這就是爲什麼它只返回distinct中使用的列。它可以做任何其他...

5

我認爲這將有助於你

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

請使用它,讓我知道。

+0

這一個是真棒! – rohitkadam19 2013-06-06 19:56:10

4
Model.group(:column) 

對於您的情況:

Record.group(:date) 

這將把您的所有列返回,沒有「日期」的重複。

+2

列「 .id」必須出現在GROUP BY子句中或用於聚合函數 – JosephK 2015-05-19 11:05:01

1

爲Rails 3.2和更高版本,Model.select('DISTINCT name, date, age, created_at')