JuLIOOXX 0 Denunciar post Postado Junho 18, 2010 Boa noite pessoal. O que acontece: tenho uma query com replace que adiciona dados em 3 tabelas, porém não contava que o replace so sobreescreve quando o campo passado como parametro seja PK ou Index. por falta de atenção minha esses campos nao são PK ou Index Ou seja, ficaram varios registros com os mesmos id´s com dados diferentes. ID | DATE | CHAR ------------------------ 1 | 2010-01-01 | abc ------------------------ 1 | 2010-01-02 | abcd ------------------------ 1 | 2010-01-03 | abcde ------------------------ 2 | 2010-01-01 | xyz ------------------------ 2 | 2010-01-02 | xywz Agora pra limpar essa cagada gostaria de saber uma forma de pegar esses registros duplicados e eliminar os mais antigos. Como pegar os duplicados com a data maior eu já consigo (Max(date) + Group By..). Preciso saber agora como comparar e eliminar o mais antigo. Quem puder me ajudar, estarei muito grato! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 18, 2010 posta a estrutura da tabela ai. um delete com subquery resolve, não ? Compartilhar este post Link para o post Compartilhar em outros sites
JuLIOOXX 0 Denunciar post Postado Junho 19, 2010 Ai que tá. eu acho que resolve, mas nao cheguei na query ideal ainda, estou quebrando a cuca aqui nessa pra saber se lista somente as que nao sejam as mais atuais: SELECT a.id, a.data_revisao, count(a.id) as total FROM carac_gerais a WHERE a.data_revisao > ANY (SELECT max(b.data_revisao) FROM carac_gerais b WHERE a.id = b.id) GROUP BY a.id HAVING total > 1 o bixo pega ali onde ta sublinhado.. preciso levar o id carregado para aquele where. parece que estou com um branco na cabeça. rs Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 19, 2010 Veja se ajuda .... Maiores datas SELECT ID,MAX(DATA) DATA FROM CARAC_GERAIS Menores que esta data (por ID) SELECT * FROM CARAC_GERAIS, (SELECT ID,MAX(DATA) DATA FROM CARAC_GERAIS) VIRTUAL WHERE CARAC_GERAIS.ID = VIRTUAL.ID AND CARAC_GERAIS.DATA < VIRTUAL.DATA Mas este tipo de coisa tem sempre o risco de piorar as coisas a melhor solução seria restaurar um backup, mesmo que fosse em outra base e copiar só esta tabela. Boa sorte. Compartilhar este post Link para o post Compartilhar em outros sites