2011-09-16 3 views
1

매일 쏘라고 명령 한 직원 수를 계산하고 싶습니다.Ruby on rails 활성 레코드 여러 그룹 레코드로 숫자 계산

Shoot.where("command_type = ?", "shoot").group("DATE(created_at)").group("employee_number").order("DATE(created_at)").count 

그것은 나에게 내가 같은 배열 뭔가 갖고 싶어

{[Wed, 03 Aug 2011, "7838744451"]=>2, [Wed, 03 Aug 2011, "8055898284"]=>11,[Fri, 05 Aug 2011, "9702553828"]=>1, [Fri, 05 Aug 2011, "9717466677"]=>1,[Fri, 05 Aug 2011, "8055898284"]=>1,[Wed, 06 Aug 2011, "8055898284"]=>5 

같은 출력을 제공합니다 : - 배열에서 예를 들어

[2,0,3,1] // zero is for the dates when no record is there for that date. and number in the array is that number of the employees that has been ordered to shoot. 

: 2 직원에 촬영 명령을 받았다 Wed, 3rd. 직원이 0 명인 경우 4 등으로 촬영하라는 명령을 받았습니다.

기타 : 1 주일에 몇 번이나 모든 직원이 촬영을 명령했는지 계산하려면 어떻게해야합니까? 기본적으로 100 명의 직원이 1 주째를 촬영하도록 명령 받았습니다. 120 명의 직원이 두 번째 주를 찍는 순서 였고 첫 번째 달과 두 번째 달에도 마찬가지입니다.

+0

재미있는 프로젝트처럼 들리네 ... – sscirrus

+0

누가 저를 downvoted? 아무도 저에게 문제점을 말해 줄 수 있습니까? 이것은 나쁜 질문입니까 아니면이 질문을하는 나쁜 방법입니다 .. 의견을 남겨주세요. –

+0

@sscrirrus 프로젝트의 의미에서? –

답변

1

사용중인 명령은 직원의 일일 수를 반환합니다. 종업원간에 일일 카운트를 얻으려면 group 통화를 삭제하십시오. 당신이 성능을 향상시키기 위해 DATE(CREATED_AT)에 인덱스를 추가해야합니다 이제

Shoot.daily_count_by_type # for type `shoot`, last 7 days 
Shoot.daily_count_by_type("shoot") # for type `shoot`, last 7 days 
Shoot.daily_count_by_type("eat", 14.days) # for type `eat`, last 14 days 
Shoot.daily_count_by_type("leave") # for type `leave`, last 14 days 

class Shoot 
    def self.daily_count_by_type(type = "shoot", range=7.days) 
    counts = Shoot.where(:command_type => type).group("DATE(created_at)"). 
       count("DISTINCT employee_id") 
    (range.ago.to_date..Date.today).map {|d| counts[d.to_s] || 0} 
    end 
end 

: 당신이 누락 된 날짜 값을 입력하려면

# return [2,3,1] 
Shoot.where(:command_type => shoot").group("DATE(created_at)").values 

,이 기능을 사용할 수 있습니다 .

편집 1

당신이 고유 한 값을 COUNT하는 데 필요한 의견을 바탕으로. 그에 따라 대답을 업데이트했습니다.

+0

것은 1 명의 직원이 같은 날에 두 번 또는 세 번 쏘라고 명령받을 수 있습니다. 그래서 저는 이것을 하나로 계산하고 싶습니다. –

+0

주석에 따라 고유 한 값을 COUNT해야합니다. 그에 따라 대답을 업데이트했습니다. –