Rails:按天分组和另一列

时间:2011-10-03 19:55:39

标签: ruby-on-rails

class Visitor
  has_many :sessions
end

class Session
  belongs_to :visitor
  belongs_to :site
end

class Site
  has_many :sessions
end

我希望每天能够获得网站访问者的数量。由于访问者不是直接与某个网站相关联,而是会话,我需要获取特定网站的所有会话,按天分组,然后按visitor_id分组。这是一些示例数据(按created_at ASC排序):

visitor_id  site_id   created_at
6           3         2011-09-27
6           3         2011-09-27
7           3         2011-09-27
2           3         2011-09-29
7           3         2011-09-29

理想情况下,我应该看到09/27有2个独特的访客,并且在09/29还有2个独立访客。我试过这个:

Session.group('date(created_at)').group('visitor_id').size

但我得到了回报(这是不正确的):

 # => {Tue, 27 Sep 2011=>3, Thu, 29 Sep 2011=>2} 

谢谢你们!

3 个答案:

答案 0 :(得分:8)

@counts = Session.group('date(created_at), visitor_id').count

@counts.each do |(date, visitor), count|
  puts "#{visitor.name} visted the site #{count} times on #{date}"
end

答案 1 :(得分:0)

Session.where(:created_at => desired_date).group('visitor_id').count

这里没有可以测试的控制台,抱歉。

答案 2 :(得分:0)


@counts = Session.group('date(created_at)').
                  select("count(distinct sessions.visitor_id) as total, sessions.created_at").
                  all

@counts.each do |count|
  puts "#{count.total} on #{count.created_at.strftime('%m/%d/%y')}"
end