我开始使用的活动表如下图所示,我希望了解每个用户每月的活动数量。问题是现在,每个用户每天有多行。我需要为每个用户每天只计算一行。
Activities
Activity_id | user_id | activity_type | created_at
1 1 time_trial 2016-04-30
2 1 time_trial 2016-04-30
3 1 time_trial 2016-04-31
4 3 time_trial 2016-04-31
5 3 time_trial 2016-04-31
6 1 time_trial 2016-04-32
我认为结果表应该像
user_id | activities per month
1 3
3 1
答案 0 :(得分:0)
你想要the ActiveRecord group
method。
您的查询类似于:
Activity.where(user_id: 1).group("date(created_at)").count
...获取“至少有一项活动计算用户1的日期。”
如果您想逐个月地获取use ActiveRecord range conditions。 (您需要向下滚动到第2.3.2节)
Activity.where(user_id: 1).where(created_at: (1.month.ago..Time.now)).group("date(created_at)").count
...获取“用户1天数,过去一个月内至少有一项活动。”
我不会经历几个月的所有可能的排列和计数。希望这能让你开始! :)
答案 1 :(得分:0)
您可以使用以下内容:
Activity.where(:user_id=>user.id).group_by { |data| data.created_at).to_date }