Ir para conteúdo
Fórum Script Brasil
  • 0

Apagar registros com nome duplicado


piteco

Pergunta

Pessoal, na minha tabela tenho os seguintes campos:

Nome do campo tipo de dados

codigo auto numeração

assunto texto (onde fica o nome do paciente)

data data/hora

remetente texto

para texto

O campo assunto vem o nome do paciente, no campo data é a data de envio de um e-mail.

Todos as dados gravados nessa tabela são importados do outlook 2007, acontence que contantemente esses e-mail´s são enviando duplicados, são certa de 600 emails por dia. Para apagar os e-mail´s duplicados manualmente é muito demorado e fica muito ruim porque quantidade de e-email´s tende a aumentar.

Para facilitar, fiz uma consulta com um grid onde só me mostra os registros com o campo assunto (nome do paciente) igual, ficando assim:

Assunto Data

Andre Carlos 05/01/2010 15:00:00

Andre Carlos 05/01/2010 15:05:10

Andre Carlos 05/01/2010 20:00:00

Marcelo Ramos 05/01/2010 08:10:20

Marcelo Ramos 05/01/2010 08:20:00

Marcelo Ramos 05/01/2010 13:10:00

Para nós, os e-mail´s com diferença de até 10mim de um para o outro.

Minha necessidade é excluir 1 desses e-email´s para que fiquem assim:

quero excluir :

Assunto Data

Andre Carlos 05/01/2010 15:00:00

Marcelo Ramos 05/01/2010 08:10:20

Ficando assim:

Assunto Data

Andre Carlos 05/01/2010 15:05:10

Andre Carlos 05/01/2010 20:00:00

Marcelo Ramos 05/01/2010 08:20:00

Marcelo Ramos 05/01/2010 13:10:00

O código para selecionar as informações com o campo assunto igual eu tenho e é esse:

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('ORDER BY assunto,data');
Para excluir eu acrescentei abaixo da última linha do código acima essa instrução
ADO_qry_telemedicina.SQL.Add('DELETE FROM telemedicina t');
   ADO_qry_telemedicina.SQL.Add('WHERE data < (SELECT max(data) FROM telemedicina x');
   ADO_qry_telemedicina.SQL.Add('WHERE t.data = x.data)');

   ADO_qry_telemedicina.ExecSQL;
   ADO_qry_telemedicina.Open;

Dá erro logo na compilação, mesmo assim, com esse código excluiria tudo e eu só quero excluir os registros com 10 mim de diferença.

alguém pode me ajudar ?

Para as tabelas eu uso o ACCESS.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Andre Carlos 05/01/2010 15:00:00

Andre Carlos 05/01/2010 15:05:10

Andre Carlos 05/01/2010 20:00:00

Marcelo Ramos 05/01/2010 08:10:20

Marcelo Ramos 05/01/2010 08:20:00

Marcelo Ramos 05/01/2010 13:10:00

Para nós, os e-mail´s com diferença de até 10mim de um para o outro.

Para que voce entenda a lógica, coloque esse conteudo em um memo, o codigo abaixo irá selecionar deletar somente os códigos repetidos com diferença acima de 10 minutos

procedure TForm1.Button1Click(Sender: TObject);
var i,j : integer; hora, nome1, nome2 :string; hor1, hor2 : TTime;
begin
   for i := 0 to Memo1.Lines.Count-1 do
      begin
         if pos(':',Memo1.Lines.Strings[i]) > 0 then
            begin
               nome1 := (copy(Memo1.Lines.Strings[i],1,20));
               hora := (copy(Memo1.Lines.Strings[i],pos(':',Memo1.Lines.Strings[i])-2,8));
               hor1 := strtotime(hora);

               if i = 0 then
                  begin
                     hor2 := hor1;
                     nome2 := nome1;
                  end;

               if i > 0 then
                  begin
                     if (hor1+strtotime('00:10:00') > hor2) and (nome2 = nome1)  then
                        Memo1.Lines.Delete(i);

                     nome2 := nome1;
                     hor2 := hor1;
                  end;
            end;
     end;
end;

OBS: O principio é o mesmo usando um banco de dados

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...