Funzione per eliminare record duplicati con campi vuoti.

di il
22 risposte

Funzione per eliminare record duplicati con campi vuoti.

Buongiorno.

Ho bisogno di una funzione che mi permetta di eliminare dei record all'interno di una tabella.

Mi spiego meglio:

campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
ABCDE  HIL
ABCDEFGHIL

Devo ottenere questo risultato:

campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
ABCDEFGHIL

Se i dati fino al campo5 sono identici in entrambi i record e dal campo6 al campo10 trovo record identici ma alcuni vuoti, allora il record con campi vuoti deve essere eliminato, perchè terrò il record identico ma con più informazioni.

C'è qualcuno che mi sa aiutare?

Grazie in anticipo!

22 Risposte

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    Sono davvero migliaia questi possibili record duplicati? Ragionando per piccoli passi, comincia a costruire una “query ricerca duplicati” sulla combinazione dei campi 1-5. Poi…io non so, procederei a mano…altrimenti occorre impostare un codice VBA (non credo poi così semplice) che analizzi tutti i restanti campi.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    Questa ridondanza di valori mi porta a pensare che tu stia riportando modalità operative di un foglio elettronico di calcolo. Quello che chiedi è fattibile, ma peno sia meglio che tu esponga alcuni dettagli del tuo progetto: tabelle, campi, relazioni.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    Non ha senso avere quei dati in quel modo a meno che non vengano fuori da una query.

    In ogni caso non sono duplicati ma simili.

    un duplicato è:

    campo 1 campo 2 campo… campo N

    1                 2             …               n

    1                 2             …               n

    oppure

    a             b              ….              n

    a             b              ….              n

    avere dati con null che per un db è un valore come un altro non lo rende un dupicato.

    per trovare duplicati dovresti confrontare tutti i campi che so, ad esempio:

     select campoindice, campo1+campo2+campo…+campon as miotest bla bla oreder by miotest

    avresti

     id e 12…n

    id e 12..n

    id e ab…n

    id e ab…n

    nel tuo caso avresti come miotest

    abcdehil e abcdefghil che come vedi non sono uguali.

    quindi dovresti limitarti a trovare valori di miotest duplicati, leggere l'id (suppongo ci sia) capire quale id eliminare e poi riflettere sul perchè hai tanti record duplicati.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - OsvaldoLaviosa ha scritto:


    Sono davvero migliaia questi possibili record duplicati? Ragionando per piccoli passi, comincia a costruire una “query ricerca duplicati” sulla combinazione dei campi 1-5. Poi…io non so, procederei a mano…altrimenti occorre impostare un codice VBA (non credo poi così semplice) che analizzi tutti i restanti campi.

    I record nella tabella sono 47000 ma sono in costante crescita. La tabella è il risultato finale di un DB molto complesso con 20 query in successione.

    Il DB è stato creato con regole ben precise dettate da logiche non modificabili perchè dietro c'è tutta una serie di ragionamenti legata al risultato finale.

    In una seconda fase, c'è stata una richiesta ulteriore, chiamiamola una variante ulteriore che per forza è stata inserita in cascata all'interno delle query, ma il suo inserimento genera in alcuni casi dei record duplicati.

    L'unico modo è quindi agire sull'ultima tabella generata, perchè l'alternativa sarebbe di rifare da zero tutto, il che è improponibile.

    Rispondo anche a sihsandrea: si esatto, i dati arrivano da una sequenza di query, sono già state valutate e ragionate, non c'è modo di risolvere il problema a monte senza generare altri problemi, di conseguenza devo provare a risolverlo a valle partendo dalla tabella finale.

    Come dici tu, i dati non sono duplicati ma simili, io ho utilizzato il termine duplicati per rendere l'idea.

    Ho quindi l'esigenza di eliminare il record “simile” che contiene meno dati e tenere quello che ne contiene di più. 

    I primi 5 campi determinano se il record è duplicato, mentre per i campi da 6 a 10 vale la regola che viene tenuto il record che ha più campi compilati.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - sihsandrea ha scritto:


    un duplicato è:

    campo 1 campo 2 campo… campo N

    1                 2             …               n

    1                 2             …               n

    oppure

    a             b              ….              n

    a             b              ….              n

    Per me ProfiloBasso è stato chiaro. Per lui il duplicato è inteso solo sui primi 5 campi (tutti compilati).

    31/10/2024 - Antony73 ha scritto:


    Questa ridondanza di valori mi porta a pensare che tu stia riportando modalità operative di un foglio elettronico di calcolo. Quello che chiedi è fattibile, ma peno sia meglio che tu esponga alcuni dettagli del tuo progetto: tabelle, campi, relazioni.

    Condivido in parte queste perplessità. ProfiloBasso, se hai posto una domanda generica, ci può pure stare la tua schematizzazione di Campo1-Campo10. Ma se davvero hai una tabella con quei nomi propri di campo…ciò si scontra con un minimo di regole di normalizzazione dati ecc…e la domanda di Antony73 è opportuna.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - OsvaldoLaviosa ha scritto:


    31/10/2024 - sihsandrea ha scritto:


    un duplicato è:

    campo 1 campo 2 campo… campo N

    1                 2             …               n

    1                 2             …               n

    oppure

    a             b              ….              n

    a             b              ….              n

    Per me ProfiloBasso è stato chiaro. Per lui il duplicato è inteso solo sui primi 5 campi (tutti compilati).

    31/10/2024 - Antony73 ha scritto:


    Questa ridondanza di valori mi porta a pensare che tu stia riportando modalità operative di un foglio elettronico di calcolo. Quello che chiedi è fattibile, ma peno sia meglio che tu esponga alcuni dettagli del tuo progetto: tabelle, campi, relazioni.

    Condivido in parte queste perplessità. ProfiloBasso, se hai posto una domanda generica, ci può pure stare la tua schematizzazione di Campo1-Campo10. Ma se davvero hai una tabella con quei nomi propri di campo…ciò si scontra con un minimo di regole di normalizzazione dati ecc…e la domanda di Antony73 è opportuna.

    La tabella finale ha 61 campi e quelli che determinano se un record è duplicato sono i primi 16 campi. Logicamente non si chiamano campo1 campo2 ecc, hanno nomi che ne identificano il contenuto. 

    Qui ho costruito una demo per rendere l'idea.

    Logicamente se qualcuno sa come risolvere la demo, di conseguenza io la applicherò alla mia tabella a 61 campi.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    Ok, n=5

    Ripensandoci è una normale select con order by campi richiesti.

    Dal li vede con quale criterio eliminare gli altri.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - ProfiloBasso ha scritto:


    La tabella finale ha 61 campi e quelli che determinano se un record è duplicato sono i primi 16 campi. Logicamente non si chiamano campo1 campo2 ecc, hanno nomi che ne identificano il contenuto. 

    Una tabella con 61 campi? Secondo me il DB non è normalizzato e per giunta sei pure convinto di operare nella maniera corretta.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    61 campi ??

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - Antony73 ha scritto:


    31/10/2024 - ProfiloBasso ha scritto:


    La tabella finale ha 61 campi e quelli che determinano se un record è duplicato sono i primi 16 campi. Logicamente non si chiamano campo1 campo2 ecc, hanno nomi che ne identificano il contenuto. 

    Una tabella con 61 campi? Secondo me il DB non è normalizzato e per giunta sei pure convinto di operare nella maniera corretta.

    Grazie per tutte le risposte, non sono solito chiedere aiuti nei forum, è la seconda volta in 13 anni, però a volte ci si sente come uno con la ruota bucata a borso strada che chiede aiuto e al posto di ricevere aiuto (ovvero qualcuno che ti prende la ruota di scorta e te la cambia), rallentano e ti dicono che hai sbagliato a scegliere la marca degli pneumatici. 

    A me non serve sapere che ho sbagliato la marca, serve qualcuno che ricolva la tabella che ho inserito sopra, quando ha risolto io trasferirò la logica usata e la adatterò alla mia tabella.

    Grazie e saluti a tutti.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    Allora più che un controllo per eliminare duplicati ti serve un controllo per evitare duplicati in fasedi inserimento.

    Con access già trattato qualche giorno fa' 

    I controlli si fanno a monte non a valle.

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - sihsandrea ha scritto:


    Allora più che un controllo per eliminare duplicati ti serve un controllo per evitare duplicati in fasedi inserimento.

    Con access già trattato qualche giorno fa' 

    I controlli si fanno a monte non a valle.

    Purtroppo le ipotesi o i consigli sulla base di intuizioni non mi possono aiutare e io ho necessità di fare i controlli a partire da questa tabella, qualsiasi altro suggerimento che non parta da questo punto fermo non mi serve.

    Se sono sceso su un forum è perchè ho già provato tutte le strade percorribili e ragionato su come risolvere questa cosa, ma l'unica soluzione è lavorare sulla tabella finale, in alternativa l'unica altra soluzione è distruggere l'intero MONSTRE database cresciuto negli anni a suon di necessità e richieste varie e rifare tutto da zero.

    Dato che rifare tutto da zero è una soluzione non percorribile, devo per forza lavorare sulla tabella finale.

    Ripeto, a me basta che qualcuno risolva come nella settimana enigmistica il mio primo quesito della tabella standard con 10 campi.

    Se qualcuno mi fa vedere come si fa, io prenderò la logica e la adatterò al mio caso specifico.

    Preciso inoltre che i dati duplicati non derivano da errori umani di inserimento, tutti i dati arrivano dal settore automotive e sono acquistati da banche dati immense che vengono anche usate dal settore assicurativo per generare ad esempio i preventivi di riparazione dei veicoli.

    Parliamo di banche dati con miliardi di informazioni che costano ogni anno 15.000 euro solo per ricevere gli aggiormamenti.

    I dati duplicati si generano a causa di un campo ben preciso e so benissimo il perchè vengono generati, ma proprio perchè so come e perchè vengono generati, so anche che non posso modificare questa cosa a monte, se no l'avrei già fatto.

    Quindi torno alla prima domanda:

    Ho bisogno di una funzione che mi permetta di eliminare dei record all'interno di una tabella.

    Mi spiego meglio:

    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDE  HIL
    ABCDEFGHIL

    Devo ottenere questo risultato:

    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDEFGHIL

    Se i dati fino al campo5 sono identici in entrambi i record e dal campo6 al campo10 trovo record identici ma alcuni vuoti, allora il record con campi vuoti deve essere eliminato, perchè terrò il record identico ma con più informazioni.

    C'è qualcuno che mi sa aiutare?

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - ProfiloBasso ha scritto:


    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDE  HIL
    ABCDEFGHIL

    Questa situazione è chiara : vuoi escludere il record con i campi vuoti (null / “” ).

    31/10/2024 - ProfiloBasso ha scritto:


    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDE  HIL
    ABCDE GHIL

    In questa situazione cosa vuoi ottenere : il record che contiene più campi significativi (quindi il secondo) oppure nessuno dei 2 perché almeno 1 campo è vuoto?

    31/10/2024 - ProfiloBasso ha scritto:

    ABCDEFG I 
    ABCDE  HIL
    ABCDEF HI 

    …terrò il record identico ma con più informazioni…

    Sempre che sia ammessa una situazione del genere (scelta a caso tra tutte le possibili combinazioni di campi vuoti), qual'è il record che contiene più informazioni ?

    Nessuno perché in tutti i record c'è almeno un campo vuoto, il primo perché i campi sono organizzati secondo un ‘peso’ (il primo ha i campi 6 e 7 pieni e quindi ‘vale’ di più), uno qualsiasi dei tre perché hanno lo stesso numero di campi pieni (o vuoti)?

  • Re: Funzione per eliminare record duplicati con campi vuoti.

    31/10/2024 - max.riservo ha scritto:


    31/10/2024 - ProfiloBasso ha scritto:


    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDE  HIL
    ABCDEFGHIL

    Questa situazione è chiara : vuoi escludere il record con i campi vuoti (null / “” ).

    31/10/2024 - ProfiloBasso ha scritto:


    campo1campo2campo3campo4campo5campo6campo7campo8campo9campo10
    ABCDE  HIL
    ABCDE GHIL

    In questa situazione cosa vuoi ottenere : il record che contiene più campi significativi (quindi il secondo) oppure nessuno dei 2 perché almeno 1 campo è vuoto?

    31/10/2024 - ProfiloBasso ha scritto:

    ABCDEFG I 
    ABCDE  HIL
    ABCDEF HI 

    …terrò il record identico ma con più informazioni…

    Sempre che sia ammessa una situazione del genere (scelta a caso tra tutte le possibili combinazioni di campi vuoti), qual'è il record che contiene più informazioni ?

    Nessuno perché in tutti i record c'è almeno un campo vuoto, il primo perché i campi sono organizzati secondo un ‘peso’ (il primo ha i campi 6 e 7 pieni e quindi ‘vale’ di più), uno qualsiasi dei tre perché hanno lo stesso numero di campi pieni (o vuoti)?

    Grazie, giusto approccio, rispondo subito:

    la seconda situazione è: se da campo1 a campo5 i dati sono identici, allora terrò sempre e comunque il record con più campi compilati, ovvero il secondo.

    La terza situazione non potrà mai verificarsi: al massimo possono generarsi solo due record simili, non ci saranno mai 3 record con i primi 5 campi identici.

Devi accedere o registrarti per scrivere nel forum
22 risposte