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

個別に使用しているという事実は、返される各「行」が実際にはn行を表すことを意味します。したがって、DBは、残りの列をプルするn行のどれかを認識しません。そのため、個別に使用されている列のみが返されます。それは他に何もできません...

于 2013-01-30T16:48:25.727 に答える
5

私はこれがあなたを助けると思います

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

使って教えてください。

于 2012-04-26T06:27:13.863 に答える