2013-07-03 43 views
0

我想根據創建記錄的時間從用戶表中獲取輸出。時間存儲在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點至上午6點,如果created_at時間落在此範圍內,則可以在time_span列上執行group_by。有更好的解決方案

回答

0

我的建議是在數據庫上創建另一列,這樣可以避免在選擇時計算一個簡單的列。

0

我不知道你不能夠使用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}"} 

有可能簡化這個機會,你可以推分組成數據庫如果你願意,但我想我會繼續分享。