Можно ли сделать это одним sql-запросом?
Выборка нескольких последних записей в неких группах
Можно

select * from статьи t 
where :n > (select count(*) from статьи s where s.автор = t.автор and s.id<t.id)

Но решение с несколькими запросами с клиента будет куда производительнее.

Возможно тут еще как-то можно применить трюк с переменными…