Eliminare record doppioni su 2 colonne

di il
8 risposte

Eliminare record doppioni su 2 colonne

Salve a tutti, sono un neofita ed ho questa necessità:
Ho delle tabelle con colonne e centinaia di migliaia di righe. La colonna codice contiene il codice unico che identifica la persona.
Mi sono reso conto che ci sono doppioni, triplicati, quadruplicati etc.
Ho proceduto ad eliminazione dei duplicati eliminando le righe che contenevano lo stesso codice conservando la riga con data più vecchia. con questa query:
DELETE *
FROM Tabella AS T1
WHERE Id <> 
(SELECT Min(Id) FROM Tabella WHERE codice = T1.codice);
Mi sono reso conto, però, che ho necessità di mantenere la riga più vecchia sì ma che non abbia nella colonna Dia un determinato valore compreso tra 600 e 625.

Allego un esempio che è molto più chiaro.
Qualcuno mi può aiutare?
Grazie
Allegati:
16950_85dd227468c0a5ddd110d6d253dcac5b.jpg
16950_85dd227468c0a5ddd110d6d253dcac5b.jpg

8 Risposte

  • Re: Eliminare record doppioni su 2 colonne

    Esiste la procedura guidata per la "query ricerca duplicati". Dopo che l'hai costruita, aggiungi anche il Criterio sul campo Dia:
    Not Between 600 And 625
  • Re: Eliminare record doppioni su 2 colonne

    Purtroppo li devo eliminare.
  • Re: Eliminare record doppioni su 2 colonne

    Dovresti trasformare la tua query in "query di eliminazione".
    Esiste un argomento sulla guida in linea "Eliminare record duplicati con una query".
  • Re: Eliminare record doppioni su 2 colonne

    g.pino ha scritto:


    Salve a tutti, sono un neofita ed ho questa necessità:
    Ho delle tabelle con colonne e centinaia di migliaia di righe. La colonna codice contiene il codice unico che identifica la persona.
    Mi sono reso conto che ci sono doppioni, triplicati, quadruplicati etc.
    Ho proceduto ad eliminazione dei duplicati eliminando le righe che contenevano lo stesso codice conservando la riga con data più vecchia. con questa query:
    DELETE *
    FROM Tabella AS T1
    WHERE Id <> 
    (SELECT Min(Id) FROM Tabella WHERE codice = T1.codice);
    Mi sono reso conto, però, che ho necessità di mantenere la riga più vecchia sì ma che non abbia nella colonna Dia un determinato valore compreso tra 600 e 625.
    DELETE *
    FROM Tabella AS T1
    WHERE Id <>
    (SELECT Min(Id) FROM Tabella WHERE codice = T1.codice AND codice Not Between 600 And 625);
  • Re: Eliminare record doppioni su 2 colonne

    Grazie Philcattivocarattere è la soluzione giusta . L'unica che aggiungo è che dopo And di mettere il nome della colonna (nel mio caso Dia) con il valore da eliminare. Grazie ancora.
  • Re: Eliminare record doppioni su 2 colonne

    g.pino ha scritto:


    ...L'unica che aggiungo è che dopo And di mettere il nome della colonna (nel mio caso Dia) con il valore da eliminare. Grazie ancora.
    Questa non l'ho capita io. La scrivi per esteso, per favore? (non tanto per l'END che sicuramente è AND ma... proprio il discorso in generale) ma era And o End? avevo letto male io? boh.
  • Re: Eliminare record doppioni su 2 colonne

    Nel caso del mio esempio:
    DELETE *
    FROM Tabella AS T1
    WHERE Id <>
    (SELECT Min(Id) FROM Tabella WHERE codice = T1.codice AND Dia Not Between 600 And 625);
  • Re: Eliminare record doppioni su 2 colonne

    g.pino ha scritto:


    Nel caso del mio esempio:
    DELETE *
    FROM Tabella AS T1
    WHERE Id <>
    (SELECT Min(Id) FROM Tabella WHERE codice = T1.codice AND Dia Not Between 600 And 625);
    Ah, sì, giusto! I valori da escludere sono nel campo DIA, non in Codice. Bon, comunque avevi capito il concetto.
Devi accedere o registrarti per scrivere nel forum
8 risposte