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

SQL

MySQL

PHP

Banco de Dados

07/11/2017

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

Curtidas 0

Respostas

Henrique Dias

Henrique Dias

07/11/2017

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
GOSTEI 0
Anderson

Anderson

07/11/2017

Pode ser comandos
select
e
delete
pois tenho acesso ao banco de dados.
GOSTEI 0
Anderson

Anderson

07/11/2017

Melhor explicando: Comandos
SQL
GOSTEI 0
Anderson

Anderson

07/11/2017

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';
GOSTEI 0
POSTAR