Uruchomiłbym kursor (z językiem programowania MySQL SP, Java, Python, .NET) w tym zapytaniu:
select Name, Firstname, Lastname, count(1)
from Pruebas
group by Name, Firstname, Lastname
having count(1) > 1
Następnie w wierszach zwróconych przez kursor po prostu zrób wszystko, co musisz:sprawdź wystąpienie FIN%, sprawdź obecność PersonalKey i odpowiednio zaktualizuj.
Dla każdego wiersza na kursorze możesz otworzyć inny kursor za pomocą:
select *
from Pruebas
where Name = the_Name
and Firstname = the_Firstname
and Lastname = the_Lastname
A teraz będziesz miał wewnętrzny kursor ze wszystkimi wierszami, które zmodyfikujesz. Jeśli jest to ten, którego potrzebujesz, zachowaj go i zaktualizuj przy użyciu wspomnianej wartości KEY. W przeciwnym razie usuń go.
W Oracle możesz osiągnąć to, co chcesz w jednym zapytaniu, ale nie sądzę, że w ten sposób uzyskasz taką samą wydajność, jak przy tym podejściu.
Mam nadzieję, że to pomoże.