getting an average of a column per day

I'm trying to generate a report for the average number of calls a person makes per-day. The following generates the correct list, but if a user didn't make any calls a certain day it doesn't show up.

from_date = Time.now.at_beginning_of_month.to_s(:db)

to_date = Time.now.tomorrow.to_s(:db)

ave_calls = @current_user.calls.average(:num_of_calls,     :group => "DATE(calls.start_time_stamp)",     :conditions => ["calls.created_at BETWEEN ? AND ?",     from_date, to_date])

What is the best way of doing this? An example I have right now, I have data from August 3rd til Today, no calls were made August 2nd or August 1st. The list comes back and starts at the 3rd.

Ryan King wrote:

I'm trying to generate a report for the average number of calls a person makes per-day. The following generates the correct list, but if a user didn't make any calls a certain day it doesn't show up.

Why would a day with no calls appear? Its just reporting the DB data in an aggregated format.

Merge the returned ave_calls with a list built out of an iteration of from_date to to_date by day to fill the gaps.

As I go up in the array, i notice it's only incrementing by seconds, not by days. For example:

irb(#<ReportsController:0x47b7524>):009:0> call_aves[30] => [Sat Aug 01 00:00:30 -0400 2009, 0]

How do I get this to go up by the day, not the second?

Well if you use dates rather than times that happens for free (since + 1 for a date means + 1 day), if not then you just need to put some time values in an array, incrementing by a day at a time ( + 1.days or using advance for example)

Fred