2013-07-03 4 views
0

레코드 생성 시간에 따라 사용자 테이블의 출력을 가져오고 싶습니다. 시간은 created_at 열에 저장됩니다.시간대 별 그룹화

출력은 다음과 같이 될 것이다 : 나는 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 

. 내가 찾은 해결책은 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}"} 

아마이를 단순화 할 수있는 기회가 있습니다 당신이 데이터베이스에 최대 그룹화를 밀어 수 네가 원한다면,하지만 난 나눌 줄 알았어.

관련 문제