Это можно сделать за несколько шагов.
Первый - получить количество сообщений, сгруппированных по group_id.
posts = Post.includes(
:user
).where(
'users.group_id is not null'
).where(
:posts => {:created_at => ('12.09.2011'.to_date)..('12.09.2012'.to_date)}
).group(
:group_id
).count
Он вернет хеш, например {1=>4, 2=>5, 3=>2}
, где ключ - это идентификатор группы, а значение - количество сообщений.
Затем вам нужно отсортировать этот хеш и получить последний элемент массива.
sorted_hash = posts.sort_by {|key,value| value}
top_posters_group = sorted_hash[-1]
После этого top_posters_group[0]
будет идентификатором группы, а top_posters_group[1]
- количеством сообщений.
Но в любом случае это не идеальное решение.
Проверено в рельсах 3.1 с ruby 1.9.2.