Ir para conteúdo
Fórum CódigoFonte.net
Entre para seguir isso  
Marcos Barbosa

Deletar um dos registros duplicados

Recommended Posts

Pessoal, tenho uma tabela em ACCESS que com os campos

codigo - Auto numeração

assunto - Texto

Data - Data / Hora

O campo assunto pode repetir-se várias vezes, assim:

Assunto Data

Gilbeto Menezes 25/01/2011 16:40:00

Gilbeto Menezes 25/01/2011 16:50:00

Gilbeto Menezes 25/01/2011 17:40:00

Gilbeto Menezes 26/01/2011 17:40:00

Maria do Carmo 01/01/2011 08:00:00

Maria do Carmo 01/01/2011 08:10:00

Maria do Carmo 01/01/2011 08:15:00

Maria do Carmo 01/01/2011 10:00:00

Maria do Carmo 02/01/2011 10:00:00

Os dados do campo ASSUNTO, se repete, mas os dados do campo DATA/HORA as vezes se repetem, mas na sua maioria ele fica com uma direrença nos minutos.

O que estou querendo fazer é: selecionar todos os registros que o campo ASSUNTO de repitam e apagar o que for mais antigo, mas só com até 10 mim de diferença. Então ficaria assim:

Deletaria:

Assunto Data

Gilbeto Menezes 25/01/2011 16:40:00

Maria do Carmo 01/01/2011 08:00:00 - esse pq tem 10 mim de diferença com o registro de 08:10:00

Maria do Carmo 01/01/2011 08:10:00 - esse pq tem 05 mim de diferença com o registro de 08:15:00

e ficariam na base de dados:

Assunto Data

Gilbeto Menezes 25/01/2011 16:50:00

Gilbeto Menezes 26/01/2011 17:40:00

Maria do Carmo 01/01/2011 08:15:00

Maria do Carmo 01/01/2011 10:00:00

Maria do Carmo 02/01/2011 10:00:00

Já tenho uma rotina que seleciona todos os registos com o campo assunto repetidos:

 ADO_qry_telemedicina.Close;

   ADO_qry_telemedicina.SQL.Clear;

   ADO_qry_telemedicina.SQL.Add('SELECT  t.* FROM telemedicina t');

   ADO_qry_telemedicina.SQL.Add('WHERE EXISTS(SELECT COUNT(*), x.assunto FROM telemedicina x');

   ADO_qry_telemedicina.SQL.Add('where x.assunto = t.assunto');


   ADO_qry_telemedicina.SQL.Add('AND data BETWEEN :_dta_ini and :_dta_fim');


   ADO_qry_telemedicina.SQL.Add('GROUP BY x.assunto');

   ADO_qry_telemedicina.SQL.Add('HAVING COUNT(*) > 1 )');

   ADO_qry_telemedicina.SQL.Add('ORDER BY assunto, data');


   ADO_qry_telemedicina.Parameters.ParamByName('_dta_ini').Value := dtp_Data_ini.DateTime;

   ADO_qry_telemedicina.Parameters.ParamByName('_dta_fim').Value := dtp_Data_fim.DateTime;

   ADO_qry_telemedicina.Open;

Bem pessoal, acho que consegui explicar minha dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei assim, mas dá erros:


   ADO_qry_telemedicina.Close;

   ADO_qry_telemedicina.SQL.Clear;

   ADO_qry_telemedicina.SQL.Add('SELECT t.* FROM telemedicina t');

   ADO_qry_telemedicina.SQL.Add('WHERE EXISTS(SELECT COUNT(*), x.assunto FROM telemedicina x');

   ADO_qry_telemedicina.SQL.Add('where x.assunto = t.assunto');


   ADO_qry_telemedicina.SQL.Add('GROUP BY x.assunto');

   ADO_qry_telemedicina.SQL.Add('HAVING COUNT(*) > 1 )');


   ADO_qry_telemedicina.SQL.Add('DELETE FROM telemedicina t');

   ADO_qry_telemedicina.SQL.Add('WHERE data < (SELECT max(data) FROM telemedicina x WHERE t.data = x.data )');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×
×
  • Criar Novo...