In Postgres you can do:
@user.comments.group("DATE_TRUNC('month', created_at)").count
to get:
{"2012-08-01 00:00:00"=>152, "2012-07-01 00:00:00"=>57, "2012-09-01 00:00:00"=>132}
It accepts values from “microseconds” to “millennium” for grouping:
http://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC