Vamos por parte:
1) ¿El ID de esa tabla es usada como FK en alguna otra?
2) ¿Por qué razon se "duplican" registros. SI es una tabla que registra los diferentes exámenes realizados a una persona, por lo pronto debería tener un campo fecha, y por otro lado no debería eliminarse ningún registro, ya que al hacerlo se pierde trazabilidad histórica.
3) Si lo que quieres es
desactivar los registros viejos, lo estándar es agregar un campo de fecha de baja, que sera nulable y que sólo se cargue con un valor al momento de desactivarlo.
4) Si lo que quieres es realmente eliminarlos, lo primero que debes hacer es ubicar el ID de los mas recientes de cada persona, lo que (si es lo que dices) debería ser mas o menos así:
obviamente estoy
suponiendo que identificas a una persona por su documento.
5) Como te dije, la clausula TEMPORARY sólo funciona si usas la misma conexión a la base, por lo cual
no puedes probar esto en phpMyadmin, porque este crea una conexión para ejecutar cada sentencia, aunque tu no lo veas, por lo que la tabla desaparece luego de ejecutar la sentencia. Lo que te he sugerido sólo funcionará a nivel aplicación.
6) El servidor se te muere porque el GROUP BY es una cláusula asesina de performance, muy poco práctica si los campos no están indexados, o bien si son pocos registros. Pero si usas miles o centenares de miles...
Postea la estructura de las tablas, para poder entender un poco el problema. Si no sabes recuperarla, usa:
y hazlo por cada una de las tablas relacionadas para lo que deseas hacer. Copia el resultado (ampliándolo si phpMyadmin no te muestra todo el CREATE), y postealo.
Entonces veremos..