Hola de nuevo sizne.
Hoy con un poco más de tiempo, revisé a fondo el código anterior, cosa que no hice antes por carecer de él.
Y sí, efectivamente no hace lo que deseas.
Ahora bién, hice una tabla en interbase con los campos involucrados, y la cargué de la siguiente forma:
Código:
IdM CodigoM CalificacionM
-----------------------------
1 A R (abreviando...)
2 A R
3 B R
4 C R
5 B R (mal bicho el profe ...)
La consulta la hice con SELECT para visualizar el resultado (si lo borro difícilmente lo vea):
Código:
IdM CodigoM CalificacionM
-----------------------------
1 A R
3 B R
Es decir que si cambiamos
SELECT por
DELETE , esos registros son los que se eliminarán. Por lo tanto
tenemos nuestro problema solucionado.
En definitiva la consulta queda así:
Código:
SELECT * FROM PRUEBA
WHERE IdM NOT IN(
SELECT MAX(IdM) FROM PRUEBA
GROUP BY CodigoM, CalificacionM)
Fijate que usando
MAX(IdM) elimina las primeras apariciones de repetición y usando
MIN(IdM), elimina las repeticiones posteriores
Y por supuesto cambiá 'SELECT * FROM' por 'DELETE FROM', al menos si queres que borre...
Saludos.