首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每周在Rails 4/Mysql db中分组

问每周在Rails 4/Mysql db中分组
EN

Stack Overflow用户
提问于 2016-03-12 20:50:14
回答 3查看 1.3K关注 0票数 3

在rails AR中有没有按周分组的方法?

代码语言:javascript
复制
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的任何直接方法

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-12 23:13:34

如果您使用的是MySQL,您可以利用某些日期/时间函数进行分组,例如,返回以整数形式与周合并的年份的 function。

代码语言:javascript
复制
answer.where("val = 5").group('yearweek(created_at)').count
=> {
  201601 => 34,
  201602 => 35
}

如果无论年份如何,都要按周分组,请使用 function

代码语言:javascript
复制
answer.where("val = 5").group('week(created_at)').count
=> {
  01 => 23,
  02 => 54
}

看看 function docs,来确定你想要的一周的确切定义(例如,从周一开始的一周对周日的周等等)。

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

票数 3
EN

Stack Overflow用户

发布于 2016-03-12 21:03:21

在应答模型中添加以下内容:

代码语言:javascript
复制
def week
  self.created_at.strftime("%W")
end

通过以下方式更新以下代码:

代码语言:javascript
复制
answer.where("val = 5").group_by(&:week).count.map{|k,v| daily_answer_count["#{k.strftime("%Y-%m-%d")}"] = v}
票数 2
EN

Stack Overflow用户

发布于 2016-03-15 09:51:00

代码语言:javascript
复制
answers.where(:val => 5).group('week(created_at)').count
  => {
        01 => 23,
        02 => 54
     }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35963149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档