Sorry, but I think this is a 'fix the solution' question. Without understanding the underlying process, it's not possible to solve the real problem. You have got part way down a route to the answer and now are stuck. The proper answer may be to go down a diufferent route.
The constraint about not using an aggregate query makes matters worse, because you don't explain why. To get a maximum value you have to use an aggregate operation. Now that's either in an aggregate query, or it's using DMax() (which is less efficient than the query) or you have to implement your own sort in code (which doesn't seem sensible).