Selecionar e excluir registros duplicados por data da última atualização?

07/11/2017

0

Em um sistema foi encontrado um problema que houve como consequência inserções vamos dizer de mais de 16 mil repetições para cerca de uns 100 registros com mesmo nome e valor em determinada tabela.

Parece surreal, mas mais de 16 mil registros duplicados para cada valor e o erro ocorreu com cerca de uns 100 valores. O erro foi percebido após análise devido ao alto consumo de recursos do servidor, e foi observado que o erro existe desde 2014 devido às datas de inserções e de atualizações dos registros.

O que vai ser feito é excluir todos aqueles que são repetidos com data inferior a 01/11/2017 a fim de amenizar o consumo de recursos e será feita a correção do sistema.

Gostaria de saber como retornar e excluir registros repetidos, por exemplo se existir 100 registros com nomes iguais, excluir aqueles com data de última atualização inferior a 01/11/2017
Anderson

Anderson

Responder

Posts

07/11/2017

Henrique Dias

so consigo pensar em uma estrutura de repetiçao pra resolver isso, e ir comparando um por um, se achar um igual joga pra outra condição que compare as datas e o q passar faz um delete
mas para 16 mil registros vai demorar algumas horas, nao deve ser o jeito mais eficiente, porem pelo fato de eu ser iniciante e o que me vem na mente
Responder

07/11/2017

Anderson

Pode ser comandos
select
e
delete
pois tenho acesso ao banco de dados.
Responder

07/11/2017

Anderson

Melhor explicando: Comandos
SQL
Responder

07/11/2017

Anderson

Encontrei a resposta

Vamos supor, todos os registros onde existam registros com mais de 100 repetições:

SELECT 
    nome, valor, dt_add, dt_update, COUNT(*) 
FROM 
    configuracoes 
GROUP BY 
    nome, valor
HAVING 
    COUNT(*) > 100 
ORDER BY 
    dt_update DESC


Para visualizar as datas de ultima atualização de determinado registro especifico:

SELECT 
    nome, valor, dt_add, dt_update 
FROM 
    configuracoes 
WHERE 
    nome = "habilitar-alertas"
 ORDER BY 
    dt_update DESC


Deletar com datas inferiores a determinada data:

DELETE FROM 
    configuracoes 
WHERE 
    nome = "habilitar-alertas" and DATE(dt_update) < '2017-11-01';
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar