2016-09-07 2 views
1

私はサインアップしています。 created_atレコードに基づいて、毎日のサインアップ数で過去7日間のグラフを表示したい毎日のレコード数を計算します

アクティブなレコードクエリを使用して、これを手動で計算する代わりに何らかのグループ化とカウントで使用することはできますか反復を通して?

答えて

1

to_dateを使用すると、すべての時間情報を取り除くことができ、効果的な日数が得られます。

User.where('created_at >= ?', 1.week.ago).group_by { |u| u.created_at.to_date }.map { |_,v| [_, v.length]}.to_h

OR、あなたは時間の部分を気にしない場合は、この使用できます。これはあなたのcreated_atcountとハッシュを取得します

User.where('created_at >= ?', 1.week.ago).group(:created_at).count

を。

+0

私はちょうどカウントを得ることができる方法はありますか? –

+0

'{2016-08-19 13:59:39 UTC => 2016-08-19 07:30:24 UTC => 2016-08-22 12:37:51 UTC => 2016年1月1日〜 08-19 07:23:36 UTC => 1、2016-08-24 08:04:54 UTC => 1} '時間がかかるように見えます。私はちょうど日付に基づいてそれを得ることができる任意の方法。 2番目のクエリを使用しています –

+1

多数のレコードでは、グループ化がSQLで行われ、すべてのレコードを取得してからルビでグループ化するため、確かに最速のソリューションです。 –

関連する問題