Rails 3 では、一意の列の値に基づいて行を選択するにはどうすればよいですか。たとえば、すべての列を取得する必要があります。
SELECT COUNT(DISTINCT date) FROM records
これは日付列のみを返しますが、日付だけでなくすべての列 (名前、日付、年齢、created_at) 列が必要です。
ご協力いただきありがとうございます
Rails 3 では、一意の列の値に基づいて行を選択するにはどうすればよいですか。たとえば、すべての列を取得する必要があります。
SELECT COUNT(DISTINCT date) FROM records
これは日付列のみを返しますが、日付だけでなくすべての列 (名前、日付、年齢、created_at) 列が必要です。
ご協力いただきありがとうございます
ここでの問題は、定義上、同じ日付の複数のレコードが存在する可能性があることです。一意の日付を持つ複数のレコードのどれを使用するかを決定するために、ユーザースペースにロジックが必要です。これらの行を取得するためのコードは次のとおりです。
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行のどれかを認識しません。そのため、個別に使用されている列のみが返されます。それは他に何もできません...
私はこれがあなたを助けると思います
Model.find(:all, :select => 'DISTINCT name, date, age, created_at')
使って教えてください。