Salve Davy,
in questo caso approfitterei delle funzionalita' di windowing offerte dal linguaggio T-SQL...
trivialmente, puoi utilizzare una Common Table Expression per ordinare le righe in base al raggruppamento di CodiceInterno, e utilizzare in join questa proiezione per in join con la tabella principale per ottenere il tuo risultato desiderato, senza passare per altri tipi di raggruppamento, filtrando ancora per la "prima" riga a te interessante...
trivialmente
WITH cte AS (
SELECT Codice, ROW_NUMBER() OVER(PARTITION BY CodiceInterno ORDER BY Data DESC) RN
FROM dbo.MiaTabella
)
SELECT dbo.MiaTabella.*
FROM dbo.MiaTabella
JOIN cte ON cte.Codice = MiaTabella.Codice
WHERE cte.RN = 1;
--<-----------
Codice CodiceInterno Certificato Data
----------- ------------- -------------------- -----------------------
4152 343750652 487/40/01 2007-07-06 00:00:00.000
39792 1976350593 2702/63/01 2013-05-30 00:00:00.000
...
dove, come indicato, per ogni "partizione" di CodiceInterno, ordini il risultato di ROW_NUMBER()... per Data DESC... cio' crea una colonna (RN) con valorizzazione per partizione da 1 a n per quante sono le righe... a te interessa SOLO la riga con RN = 1 per ogni partizione...
salutoni romagnoli
--
Andrea