2011-08-04 17 views
2

私は数百のレコードを持つテーブルを持っています。それぞれにdatetimeカラムが含まれています。その日時フィールドから明確な年を見つける最も効率的な方法は何ですか? (ただし、これはすべてのレコードを読み込む必要になり、)Rubyは使用Railsで複数年のテーブルから別の年を見つける方法

答えて

11

Model.select("my_datetime").map{ |item| item.my_datetime.year }.uniq 

使用してSQL(この例では、私はあなたの特定のデータベースとそれを更新することができ、PostgreSQLのためのものです):

# PostgreSQL 
Model.select("distinct(extract(year from my_datetime))") 

# MySQL 
Model.select("distinct(year(my_datetime))") 

# SQLite 
Model.select("strftime('%Y', my_datetime)") 
1
SELECT DISTINCT(YEAR(created_at)) FROM your_table 

はおそらく動作しますが、使用しているデータベースに大きく依存しています(これはもちろんMySQLで動作します)。それは本当にためにロードが遅いと、すべてのあなたの記録を反復処理することができても

ActiveRecordは、

Model.all.map(&:created_at).map(&:year).uniq 

のようなRubyのステートメントを使用して、実際にbeautifulerカスタムSQL文を使用したい場合は、お尻の痛みです。

1

これは、アレイ内の独特の年を返します。

years = Model.pluck(:created_at).map{|x| x.year}.uniq

0

これは、PostgreSQLのデータベースから直接年の配列を返します。

YourModel.pluck("DISTINCT EXTRACT(YEAR FROM my_datetime)::Integer") 
関連する問題