Ruby on rails 在Rails 4/Mysql数据库中按周分组
有没有办法在rails AR中按周分组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
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
}