Bom, pra começo de conversa vc não nos diz QUAL é exatamente a regra, mas SE a 
regra for a comum (ie, há uma combinação de N colunas que deve ser única, TODAS 
as ocorrências de duplicidade implicam que TODAS AS COLUNAS FORAM REPETIDAS nos 
registros duplicados), Me parece que vc tá usando uma lógica desnecessariamente 
complicada, a sintaxe comum pra isso é :

DELETE FROM tabela 
 WHERE rowid NOT IN ( SELECT MAX(ROWID) FROM tabela GROUP BY colA,colB,colC );
 
 Blz ? E é claro, há variações em cima do tema, tipo : digamos que a regra é : 
vc acha a data de lançamento mais antiga agrupando por uma coluna (conta ?), o 
que tiver acima disso é duplicado - num caso assim vc usa MIN(coluna) .... 
Outra opção é Analytics , vide  
https://blogs.oracle.com/sql/how-to-find-and-delete-duplicate-rows-with-sql 
para alguns exemplos....
 
 []s
 
  Chiappa

Responder a