Un'alternativa potrebbe essere questa ma non so quanto possa essere più performante

codice:
select * from posta where idmsg in (select max(idmsg) from posta group by soggetto) order by idmsg desc