Mi serve di trovare i primi 3 annunci per ogni categoria

Ho due tabelle: annunci e una categorie
con questa:
codice:
SELECT * FROM annunci RIGHT JOIN categorie
       ON aCat = catId
       ORDER BY catId, aDate DESC
Ho tutti gli annunci e anche tutte le categorie dove non c'è nessun annuncio

con questa:
codice:
SELECT * FROM 
       (SELECT * FROM annunci ORDER BY aDate DESC) AS annunciOrdData
       RIGHT JOIN categorie
       ON aCat = catId
       GROUP BY catId
       ORDER BY catId
Ho l'ultimo annuncio in ordine di data per ogni categoria

E se invece di solo il primo volessi anche il secondo e terzo per ogni categoria???

Ci sto perdendo "la mia gioventù"

Grazie a chi mi potrà aiutare (non vorrei fare union varie una per ogni categoria...)