Mi chiedo se puoi farlo funzionare:
select article_id, id, article_published_date
from prediction p
where p.prediction_date = (select max(p2.prediction_date)
from prediction p2
where p2.article_id = p.article_id
)
order by article_published_date desc;
Quindi usa questi due indici:
(article_published_date desc, prediction_date, article_id, id)
(article_id, prediction_date desc)
.