Ruby on rails 在Rails 4/Mysql数据库中按周分组

Ruby on rails 在Rails 4/Mysql数据库中按周分组,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,有没有办法在rails AR中按周分组 answers = Answer.all daily_answer_count = {} answer.where("val = 5").group('date(created_at)').count.map{|k,v| daily_answer_count["#{k.strftime("%Y-%m-%d")}"] = v} Output { "2016-03-05": 65 "2016-03-06": 57 "2016-03-07": 45

有没有办法在rails AR中按周分组

answers = Answer.all

daily_answer_count = {}
answer.where("val = 5").group('date(created_at)').count.map{|k,v| daily_answer_count["#{k.strftime("%Y-%m-%d")}"] = v}

Output
{ 
"2016-03-05":  65
"2016-03-06":  57
"2016-03-07":  45
}
所以我知道的问题是,我需要为每周偏差创建一个如上所述的哈希映射 所以关键是一周的开始,值是一周的总值


在Answer model中使用rails AR进行此操作的任何直接方法添加以下内容:

def week
  self.created_at.strftime("%W")
end
通过此命令更新以下代码:

answer.where("val = 5").group_by(&:week).count.map{|k,v| daily_answer_count["#{k.strftime("%Y-%m-%d")}"] = v}

如果您使用的是MySQL,您可以利用一些日期/时间函数进行分组,例如,它以整数形式返回年和周的组合

answer.where("val = 5").group('yearweek(created_at)').count
=> {
  201601 => 34,
  201602 => 35
}
如果您想按周分组,而不考虑年份,请使用:

查看以确定您想要的周的精确定义(例如,从周一开始的一周与周日开始的一周等)


我确信在其他数据库中也有类似的功能。

self
means。这是一个答案类模型。虽然这个答案可能是正确和有用的,但如果你能解释它如何帮助解决问题,你会更喜欢它。如果有一个变化(可能是无关的)导致它停止工作,并且用户需要了解它曾经是如何工作的,那么这在将来变得特别有用。谢谢
answers.where(:val => 5).group('week(created_at)').count
  => {
        01 => 23,
        02 => 54
     }
answers.where(:val => 5).group('week(created_at)').count
  => {
        01 => 23,
        02 => 54
     }