8

毎日、1時間ごとに作成されたアイテムの数の配列を作成したいと思います。

私は人々がどのように感じているかを追跡しているので、私のTrackMoodモデルmood

私が行った場合

TrackMood.where(mood: "good").group("hour(created_at)").count

{11=>4, 12=>2, 13=>2, 15=>1} のようなものを取得します

ここに2つの問題があります

1 昨日 11 時に作成されたアイテムを今日 11 時に追加されたアイテムに追加しないように、これに日を追加するにはどうすればよいですか?

20何時間も何も作成されていないことを確認するにはどうすればよいですか?

4

2 に答える 2

12

1) 日付の時間の部分だけでグループ化するのではなく、関連する日付の部分、つまり時間までの日付をグループ化し、それよりも具体的なものを含めないようにする必要があります。例えば

TrackMood.where(mood: "good").group("date_format(created_at, '%Y%m%d %H')").count

2) グループが見つからない場合でも、この呼び出しから常にハッシュが返されます。いくつのグループがあるかを確認したい場合は、電話をかける.sizeか、その.count上で行うことができます。

于 2012-05-24T15:59:58.837 に答える
1

PostgreSQL の場合、date_partを使用できます

SO-post - Rails & Postgresql:クエリを時間ごとにグループ化する方法は?

于 2013-12-17T14:44:03.187 に答える