Мне приходилось получать данные такого рода, и обычно я заканчивал тем, что делал два запроса. В моем случае у меня есть Блоги и их сообщения, и я хотел получить список из 3 самых последних сообщений в блоге с ограничением, что блоги являются уникальными, я не хочу 2 сообщения из того же блога. В итоге я сделал что-то вроде этого (MySQL):
q = <<-EOQ
SELECT id,pub_date FROM
(
SELECT id,blog_id,pub_date
FROM posts
ORDER BY pub_date DESC
LIMIT 40
)
t
GROUP BY blog_id
ORDER BY pub_date DESC
LIMIT #{num_posts}
EOQ
post_ids = Post.connection.select_values(q)
Post.find(:all, :include => [:blog], :conditions => ["id IN (?)", post_ids], :order => "posts.pub_date DESC")
Так что в вашем случае у вас может быть что-то вроде:
q = <<-EOQ
SELECT id FROM
(
SELECT id,post_id
FROM comments
ORDER BY id DESC
LIMIT 40
)
t
GROUP BY post_id
ORDER BY id DESC
LIMIT 10
EOQ
post_ids = Post.connection.select_values(q)
Post.find(:all, :include => [:blog], :conditions => ["id IN (?)", post_ids], :order => "posts.id DESC")