6

Rails 3で次のmysqlクエリを再作成しようとしています

 select count(id), year(created_at), month(created_at) from table where published_state = 'published' group by year(created_at), month(created_at);

私は次のようなことを試しました:

results = Table.select('count(id), year(created_at), month(created_at)').where('published_state LIKE ?', 'published').group('year(created_at), month(created_at)')

しかし、それは私が望むものを返しません。

お返しにこれだけもらってる

[#<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >,
 #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >]

どうすればこれを達成できますか?

ありがとう!

4

2 に答える 2

16

これを試して:

Table.where(:published_state => 'published').
  group('year(created_at)').group('month(created_at)').count(:id)

結果の形式は、私が期待していたものとはまったく異なります (配列キー[year, month]とカウント値のようなハッシュです) が、目的に役立つでしょうか?

于 2013-05-30T17:51:08.883 に答える
0

PostgreSQL を使用している場合は、date_trunc 関数も使用できます (読みやすくするために行を分割していますが、実際の Ruby では機能しない可能性があります)。

Table.select('count(id), date_trunc('month', created_at) as month')
  .where('published_state LIKE ?', 'published').group('month')

基本的に、重要でなくなった日付の部分を切り捨てるか、切り捨てます。たとえば、「月」を選択すると、年は月とともに保存されますが、日時は保存されません。

私はおそらく次のように注文するでしょう:

Table.select('count(id), date_trunc('month', created_at) as month')
  .where('published_state LIKE ?', 'published').group('month')
  .order('month' DESC)
  .limit(24)

詳しくはこちらのドキュメントをご覧ください。

于 2015-12-27T01:42:58.167 に答える