eliminare record doppioni

Anonimo
2013-07-01T16:20:26+00:00

Salve come da titolo dovrei eliminare dei record duplicati. Ho provato varie "soluzioni" pescate in rete ma nessuna fa al caso mio.

Praticamente da una tabella Clienti, estraggo con una query di ricerca duplicati ben 74.000 record, ora vorrei creare una query di eliminazione che cancelli i record provenienti dalla query di ricerca duplicati solo se comparando i record duplicati , il campo ultimo_contatto sia maggiore del record doppione.

esempio:

codice    nominativo                      indirizzo                           codice fiscale            citta    data_ultimo_contatto    telefono

267526    ABBATE DIEGO    VIA DOTTOR  INCANDELA, 3    CCCAAA28C18C568C      LICATA    20/05/2013           0922-893716  

106757    ABBATE DIEGO    VIA DOTTOR  INCANDELA, 3    CCCAAA28C18C568C      LICATA    18/02/2008           0922-893716

Dovrebbe eliminare il record con ultimo contatto 18/02/2008

E' fattibile o devo optare per altre soluzioni?

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-07-02T14:08:04+00:00

No, purtroppo i dati posson non avere il codice fiscale ed essere comunque duplicati. Come discriminante per sapere se sono doppioni sto usando i campi Nominativo , indirizzo e città. Se sono uguali allora è un doppione. Il problema è che appunto tramite i campi che possiedo non riesco a fare un Group e dunque a far uscire i dati che mi servono.

nulla vieta di applicare lo stesso principio a 3 campi


DELETE * FROM Tabella

WHERE EXISTS (SELECT 1 FROM Tabella AS T1

              WHERE T1.Nominativo=Tabella.Nominativo AND

                    T1.Indirizzo=Tabella.Indirizzo AND

                    T1.Citta=Tabella.Citta

              GROUP BY Nominativo, Indirizzo, Citta

              HAVING COUNT(*)>1 AND Max(data_ultimo_contatto)<>Tabella.data_ultimo_contatto

              )


Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-07-02T15:46:46+00:00

    Sto provando ma dopo aver lanciato la query rimane bloccato e non mi permette di fare nulla.

    Ho modificato l'sql cambiando solamente il nome tabella ed aggiungendo ; alla fine.

    Può essere che per processare 193.700 record impieghi anche più di 15 minuti?

    DELETE *

    FROM clienti

    WHERE EXISTS (SELECT 1 FROM clienti AS T1

                  WHERE T1.Nominativo=clienti.Nominativo AND

                        T1.Indirizzo=clienti.Indirizzo AND

                        T1.Citta=clienti.Citta

                  GROUP BY Nominativo, Indirizzo, Citta

                  HAVING COUNT(*)>1 AND Max(data_ultimo_contatto)<>clienti.data_ultimo_contatto

                  );

    Ciao,

    con 193.700 record può metterci anche delle ore, purtroppo jet è quello che è.

    Se impiega troppo o se è una manutenzione che devi fare ordinariamente e non una tantum, vediamo di studiare un altro metodo.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-07-02T15:28:26+00:00

    Sto provando ma dopo aver lanciato la query rimane bloccato e non mi permette di fare nulla.

    Ho modificato l'sql cambiando solamente il nome tabella ed aggiungendo ; alla fine.

    Può essere che per processare 193.700 record impieghi anche più di 15 minuti?

    DELETE *

    FROM clienti

    WHERE EXISTS (SELECT 1 FROM clienti AS T1

                  WHERE T1.Nominativo=clienti.Nominativo AND

                        T1.Indirizzo=clienti.Indirizzo AND

                        T1.Citta=clienti.Citta

                  GROUP BY Nominativo, Indirizzo, Citta

                  HAVING COUNT(*)>1 AND Max(data_ultimo_contatto)<>clienti.data_ultimo_contatto

                  );

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-07-02T07:23:38+00:00

    No, purtroppo i dati posson non avere il codice fiscale ed essere comunque duplicati. Come discriminante per sapere se sono doppioni sto usando i campi Nominativo , indirizzo e città. Se sono uguali allora è un doppione. Il problema è che appunto tramite i campi che possiedo non riesco a fare un Group e dunque a far uscire i dati che mi servono.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-07-01T18:34:36+00:00

    Ciao GoG\_,

    se codice fiscale è il campo che determina se i record sono duplicati, puoi usare una query di eliminazione tipo questa:


    DELETE * FROM Tabella

    WHERE EXISTS (SELECT 1 FROM Tabella AS T1 WHERE T1.Codice_Fiscale=Tabella.Codice_Fiscale GROUP BY Codice_Fiscale HAVING COUNT(*)>1 AND Max(data_ultimo_contatto)<>Tabella.data_ultimo_contatto)


    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento