【问题标题】:Group by time span in rails在 Rails 中按时间跨度分组
【发布时间】:2013-07-03 05:32:55
【问题描述】:

我想根据记录的创建时间从用户表中获取输出。时间存储在 created_at 列中。

输出将是这样的:

Time             user count
2 am - 6 am       10
6 am - 10 am      5
10 am - 2 pm      5
2 pm - 6 pm      5
6 pm - 10 pm      5
10 pm - 2 am      5

我无法通过 created_at 进行分组。我发现的解决方案是创建另一列 time_span 并将该列更新为 2 am - 6 am 如果 created_at 时间落在此范围内,然后我可以在 time_span 列上执行 group_by 。有更好的解决方案吗?

【问题讨论】:

    标签: sql ruby-on-rails activerecord


    【解决方案1】:

    我的建议是在数据库中创建另一列,这样您就可以避免对选择进行计算而牺牲一个简单的列。

    【讨论】:

      【解决方案2】:

      我不确定您所说的无法使用 group_by 是什么意思,但以下方法会起作用:

      hours = Users.all.collect {|u| u.created_at.hour}
      ranges = [(2...6), (6...10), (10...14), (14...18), (18...22), (22...26)]
      summary = hours.group_by {|h| ranges.find {|r| r === (h<2 ? h+24 : h)}}
      ranges.each {|r| puts "#{r} = #{(summary[r] || []).length}"}
      

      可能有机会简化这一点,如果您愿意,您可以将分组推送到数据库中,但我想我会继续分享。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多