Вот решение для запросов типа "top N на группу".
Обратите внимание, что вы должны выбрать , какие 10 темы для данного автора вы хотите. В этом примере я предполагаю, что вам нужны самые последние потоки (а thread_id - это значение с автоматическим приращением), а для случаев связей у вас есть первичный ключ posts.post_id
.
SELECT p1.*
FROM post p1 LEFT OUTER JOIN post p2
ON (p1.author = p2.author AND (p1.thread_id < p2.thread_id
OR p1.thread_id = p2.thread_id AND p1.post_id < p2.post_id))
GROUP BY p1.author
HAVING COUNT(*) < 10;
В ответе на следующий вопрос в комментарии, вот объяснение:
В топ-10 тем на автора мы можем сказать, что для каждого из них существует 9 или меньше других тем для этого автора, принадлежащих к набору результатов. Таким образом, для каждого поста автора (p1) мы подсчитываем, сколько постов (p2) одного автора имеют большую ветку. Если это число меньше 10, то пост автора (p1) относится к результату.
Я добавил термин для разрешения связей с post_id.