Ciao,
sulla tabella delle date, visto che sei sul potente Oracle, utilizza la funzione DENSE_RANK

Esempio
MAX (codice1 )KEEP (DENSE_RANK LAST ORDER BY data3 ASC NULLS LAST)

Se hai bisogno di altre info sulla funzione sopra indicata o cerchi in internet oppure chiedi pure

Ciao
Mik