Sql 按rails中的时间跨度分组
我希望根据创建记录的时间从users表中获取输出。时间存储在created_at列中 输出如下:Sql 按rails中的时间跨度分组,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我希望根据创建记录的时间从users表中获取输出。时间存储在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 我无法按创建的组进行分组。我找到的解决方案是创建另一列,比如时间跨度,并将该列更新为凌晨2点至6点,如果
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
我无法按创建的组进行分组。我找到的解决方案是创建另一列,比如时间跨度,并将该列更新为凌晨2点至6点,如果创建的时间跨度在该跨度内,那么我可以按时间跨度列进行分组。有更好的解决方案吗?我的建议是在数据库中创建另一列,这样可以避免以牺牲一个简单列为代价来计算select 我不知道你说的不能使用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}"}
hours=Users.all.collect{| u | u.created_at.hour}
范围=[(2…6)、(6…10)、(10…14)、(14…18)、(18…22)、(22…26)]
summary=hours.group_by{h | ranges.find{r | r==(h