Help with Code Tweaking

scenario : select distinct years from members and their respective
record count of that particular year.

eg: [{year = 2008 , count = 45123},{year = 2007 , count = 12332} ]

previously , i was using "select distinct tochar(datetime)" , it ended
up taking quite a while to fetch the records so i switched to this code.

relationship group 1 : N members

rootgroup is a pretched group

member = root_group.members.find(:all,
      :select => "max(datetime) as maxdate,min(datetime) as mindate"

return member.mindate.year.upto(member.maxdate.year).inject({}) do


              #return hash with year and member count for that year

              compare_date =,1,1)

              {year , root_group.members.find(
               :conditions => [ "datetime >= ? AND datetime < ?",
                                 compare_date + 1.year ],
                                :select => 'count(*)')}

any ideas on how to tweak it ?

it really looks quite clumsy at the moment
and iam repeating the code for drilling into the months and days ,
it really feels like bad practice.


Why not use something like this:

=# select count(*), date_part('minute', created_at) as min from toys
group by min;
  count | min