Why not using analytics for this top-N ? They were (mostly) designed for this purpose and are usually much faster than a correlated subquery ..
Code:
SQL> create table documentrev (document_id,user_id,revision_number) as
select mod(rownum,3),1,rownum from all_object
where rownum <= 10;
Table created.
SQL> select * from documentrev;
DOCUMENT_ID USER_ID REVISION_NUMBER
----------- ---------- ---------------
1 1 1
2 1 2
0 1 3
1 1 4
2 1 5
0 1 6
1 1 7
2 1 8
0 1 9
1 1 10
10 rows selected.
SQL> select *
2 from (
3 select document_id,user_id,revision_number,
4 rank() over (partition by document_id
order by revision_number desc) rnk
5 from documentrev
6 )
7 where rnk = 1;
DOCUMENT_ID USER_ID REVISION_NUMBER RNK
----------- ---------- --------------- ----------
0 1 9 1
1 1 10 1
2 1 8 1