Hola.
Seguro que mañana lo verás muchísimo más claro. Nos pasa a todos que cuando pasamos demasiado tiempo delante de un problema, ya solo vemos la pantalla pero el cerebro ya está totalmente fuera de servicio
El código, en efecto no lleva ningún tipo de control para saber si estamos en el último registro de un grupo, para no borrarlo. Puesto que el registro que no borramos, en ese código, es el primero del grupo y no el ultimo.
Fíjate, si el código actual es distinto del código de grupo que tratamos, simplemente inicializamos el código de grupo que se está tratando (pero no se borra ningún registro), posteriormente, cualquier registro que se encuentre de ese grupo, será borrado.
Por cierto, en el código que te pasé no nos aseguramos de que todos los registros de un grupo, vayan a uno a continuación del otro. Para asegurarlo, tenemos que ordenar el
for select
Código:
for select CAMPO1, CAMPO2
from TABLA
order by CAMPO1, CAMPO2
into :CAMPO1, :CAMPO2 do begin
Saludos.