Essentially I'm attepting to select the top read (based on read_date), and check if it has a type in ( 'R','S','C','B','Q','F','I','A') select * from ( select * from ( select * FROM table WHERE id = 369514 order by read_date desc ) where rownum = 1 ) where type IN ( 'R','S','C','B','Q','F','I','A') I only need to return a row if the top row has a type in the set, if not return nothing. The only way I seem to be able to is using all these nasty sub-queries.