В крайна сметка го реших с корелирана подзаявка:
$qb
->select('a')
->from('Article', 'a')
->join('a.views', 'v')
->orderBy('v.viewDate', 'DESC')
->setMaxResults(20)
// Only select the most recent article view for each individual article
->where('v.viewDate = (SELECT MAX(v2.viewDate) FROM ArticleView v2 WHERE v2.article = a)')
По този начин сортирането игнорира ArticleView, различни от най-новите за дадена статия. Въпреки че предполагам, че това се представя доста лошо в сравнение с другите сурови SQL решения - всички отговори с по-добра производителност все пак ще бъдат високо оценени :).