\nSELECT a.*\n FROM table_name aa,\n (SELECT a, b, max(date)\n FROM table_name\n GROUP BY a, b) bb\n WHERE aa.a = bb.a\n AND aa.b = bb.b\n AND aa.date = bb.date\n
You shouldn't need more than one subquery to do this.
Edit: Sorry. I didn't see what you said about getting multiples of "a, b, date" back from the GROUP BY in the subquery. If that's the case, and you need to go to a variable number of tie-breakers, then you've effectively blown the limits of relational calculus.
IMO, your only choice at this point is to drop to a procedural language, stream the records by, and pick-out the ones you want to keep. Straight SQL simply will not work if you have *any* duplicate records. Even if each row is unique, nested subqueries will make your SELECT move like pondwater.
Second Edit:
Actually, combining with Ben's solution, you can do something like:
\nselect aa.*\n from table aa,\n (select a, b, \n max(to_char(date)||c||d||e) sortkey\n from table) bb\n where aa.a = bb.a\n and aa.b = bb.b\n and to_char(aa.date)||aa.c||aa.d||aa.e = bb.sortkey\n
Like I said above, though, if you have a duplicate row, then you're screwed. Unless, of course, you're using Oracle and can append the 'rowid' psuedocolumn to the sortkey field.