GroupBy gemを使用してデータベース内の過去3日間(今日)レコードのアクティビティが存在する日数を調べるクエリを実行しています日ごとにグループ化します。ここでは、完全なクエリは次のとおりです。countメソッドは、条件の日付によって異なる値を返します。
Record.activities.where("created_at >= ?", 2.days.ago.beginning_of_day.in_time_zone).group_by_day(:created_at).count.count
2日前、私は今日の0を持っていると、昨日、1つの活性を有している私がいる2.これは2(いない3、それは日ではない活動を数えています)が、ために返す必要があります何らかの理由で3が返ってきます。私が2.days.ago
を1.day.ago
または0.days.ago
に変更すると、正しい値1が返されます。アクティビティが存在しなかった昨日は無視され、その日が今日認識された日だけがカウントされます。アクティビティ。
私は二.count
を削除する場合は、ここで
{Tue, 21 Nov 2017=>1, Wed, 22 Nov 2017=>0, Thu, 23 Nov 2017=>2}
...それは2.days.ago
のために返すものだと私は1.day.ago
のためにそれを実行する場合、私が手...ここ
{Thu, 23 Nov 2017=>2}
があります2.days.ago
クエリの生のSQL ..
SELECT COUNT(*) AS count_all, strftime('%Y-%m-%d 00:00:00 UTC', created_at)
AS strftime_y_m_d_00_00_00_utc_created_at
FROM "activities"
WHERE "activities"."goal_id" = ? AND (created_at >= '2017-11-21 00:00:00')
AND (created_at IS NOT NULL)
GROUP BY strftime('%Y-%m-%d 00:00:00 UTC', created_at)
もう少しテストをした結果、x.days.ago
のxが0である場合、0のアクティビティを持つ日を無視することに気がつきました.0のアクティビティで1日以上経過した場合、最初のアクティビティは無視されますが他の日を0でカウントしてください。
私がここで行方不明になっていることはわかりませんが、問題を見つけるのに役立ちます。
詳細情報が必要な場合はお知らせください。
なぜ2回カウントされますか? –
Jutは質問を更新して、第2のものが何をするのか見ることができますが、基本的に2番目の 'count'は返されたハッシュの数を数えます。 – Nathan
私の最初の衝動はあなたがどこかでカウントを使用していることですが、あなたは合計を使うべきです。生のMySQLクエリを追加すると、私はさらにコメントすることができます。 –