2011-09-16 10 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従業員は、上の撮影に命じられました水曜日、3日。 従業員0人が4日などの撮影を命じられました...

また、全従業員が週に1回撮影する回数を計算するにはどうすればよいですか。基本的に100人の従業員が第1週の撮影を命じられました。 120人の従業員が第2週などを撮影するように指示しました。第1月と第2月。

+0

これは興味深いプロジェクトのように聞こえる... – sscirrus

+0

誰が私をdownvoted?誰でも私に問題を教えてくれますか?これは悪い質問かこれは質問をする悪い方法です..コメントを残してください。 –

+0

@sscrirrusプロジェクトは意味で? –

答えて

1

使用しているコマンドは従業員の日数を返します。従業員間で日々のカウントを取得する場合は、2回目のgroupコールを削除します。

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

あなたが欠落している日付値を記入したい場合は、この機能を使用することができます。

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 

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 

パフォーマンスを向上させるために必ずDATE(CREATED_AT)にインデックスを追加してください。あなたが異なる値をカウントする必要があるコメントに基づいて

編集1

。私はそれに応じて答えを更新しました。

+0

事は1人の従業員が同じ日に2倍または3倍を撃つように命令することができます。だから私はそれを1つとして数えたいと思う。 –

+0

コメントに基づいて、異なる値をCOUNTする必要があります。私はそれに応じて答えを更新しました。 –

関連する問題