Per come hai descritto il problema sembrerebbe che la soluzione sia banale:

codice:
select distinct
contatti.idcliente,
max(contatti.data)
from contatti
group by
contatti.idcliente
... ma immagino che il problema non sia questo e che io non ho capito!