| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
karlosrapanui Profissional


Registrado: Terça-Feira, 29 de Agosto de 2006 Mensagens: 538
|
Enviada: Seg Abr 09, 2018 9:42 am Assunto: Excluir registros duplicados |
|
|
Eu tenho um select que me retorna alguns registros duplicados, pegando pelos campos CPF e BENEFICIO
O select é esse
SELECT BENEFICIO, CPF, COUNT(*) as Quantidade
FROM ARQUIVO
WHERE SUBSTR(CPF,1,1) <> '0' AND BENEFICIO <> 'null'
GROUP BY BENEFICIO, CPF
HAVING COUNT(*) > 1
ORDER BY CPF
Preciso de uma select para excluir somente UM registro duplicado.
Utilizando Firebird
Alguem tem uma ideia ?
Valeu
Carlos |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Abr 10, 2018 10:47 am Assunto: |
|
|
Bom dia,
Acho que você pode utilizar a função Max ou Min para obter o Id de um dos registros.
PS: acho que não existe uma regra no fórum sobre isso, por isso deixo totalmente a seu critério, mas acredito que a frase da sua assinatura deva causar alguns maus entendidos
Espero que ajude |
|
| Voltar ao Topo |
|
 |
karlosrapanui Profissional


Registrado: Terça-Feira, 29 de Agosto de 2006 Mensagens: 538
|
Enviada: Ter Abr 10, 2018 1:14 pm Assunto: |
|
|
Apesar de não ser o que parece a frase que utilizo, em respeito a sua opinião, que já me ajudou bastante nesse fórum.....estou removendo a frase....
Peço desculpas se causei algum mal entendido.... |
|
| Voltar ao Topo |
|
 |
dorivansousa Novato

Registrado: Quinta-Feira, 18 de Março de 2004 Mensagens: 9 Localização: Açailândia - Ma
|
Enviada: Ter Abr 10, 2018 2:16 pm Assunto: execute block |
|
|
no firebird eu faria assim
| Código: | execute block
as
declare variable codigo integer;
declare variable cpf varchar(20);
begin
for select cpf
from arquivo
where substr(cpf,1,1) <> '0' and beneficio <> 'null'
group by cpf
having count(cpf)>1
into :cpf do
begin
select min(codigo) from arquivo where cpf = :cpf into :codigo;
if (codigo > 0) then
delete from arquivo where codigo = :codigo;
end
end | [/code] _________________ Voçê ensina melhor aquilo que mais precisa aprender |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Abr 10, 2018 2:36 pm Assunto: |
|
|
| karlosrapanui escreveu: | Apesar de não ser o que parece a frase que utilizo, em respeito a sua opinião, que já me ajudou bastante nesse fórum.....estou removendo a frase....
Peço desculpas se causei algum mal entendido.... |
Não tem do que se desculpar não, só comentei porque as vezes alguem podia interpretar de forma errada.
Voltando a questão, conseguiu resolver? Segue um exemplo:
| Código: | DELETE FROM ARQUIVO AS A
WHERE
SUBSTR(A.CPF,1,1) <> '0' AND
A.BENEFICIO <> 'null' AND
A.ID = (SELECT MAX(S.ID) FROM ARQUIVO AS S
WHERE
S.BENEFICIO = A.BENEFICIO AND
S.CPF = A.CPF
HAVING
COUNT(*) > 1) |
Espero que ajude |
|
| Voltar ao Topo |
|
 |
|