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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
Entre para seguir isso  

×
×
  • Criar Novo...