Presupunând că nu există niciun zer, GRUPUL CU coloane unice și SELECT MIN (sau MAX) RowId ca șir pentru salvare. Apoi, ștergeți pur și simplu toate cele care nu aveau ID-ul rândului:
Dacă aveți un GUID în loc de un număr întreg, puteți înlocui
O altă posibilitate
Folosesc ORDER BY (SELECT 0) de mai sus, deoarece este arbitrar, care linie este salvată în cazul unei legări.
Pentru a salva ultima în comanda RowID, de exemplu, puteți utiliza ORDER BY RowID DESC
Planul de execuție pentru acest lucru este adesea mai simplu și mai eficient decât răspunsul acceptat, deoarece nu necesită auto-conectare.
Totuși, acest lucru nu este întotdeauna cazul. Unul dintre locurile în care este preferabil să se utilizeze soluția GROUP BY este atunci când agregatul de tip hash este ales preferabil agregatului de debit.
Soluția ROW_NUMBER va oferi întotdeauna aproape același plan, în timp ce strategia GROUP BY este mai flexibilă.
Factorii care ar putea sprijini o abordare agregată de tip hash ar fi
- Nu există un indiciu util în coloanele de separare
- Relativ mai puține grupuri cu un număr relativ mare de duplicate în fiecare grup
În versiunile extreme ale acestui al doilea caz (în cazul în care fiecare grup este grupuri foarte mici, cu mai multe duplicate), puteți, de asemenea, pur și simplu insera rânduri în noul tabel, apoi TRUNCATE - returnează originalul și copiați-le înapoi pentru a minimiza logare în comparație cu eliminarea unui procent foarte mare serii.
Am folosit în trecut auto-îmbinări pentru acest lucru, deși probabil ar fi fost exagerat de sugestia de a AVEA:
Următoarea interogare este utilă pentru eliminarea rândurilor duplicate. Tabelul din acest exemplu are un ID ca coloană de identificare, iar coloanele cu date duplicate sunt Coloana1. Coloana 2 și coloana 3.
Următorul script arată utilizarea grupului BY. HAVING. ORDER BY într-o singură interogare și returnează rezultatele cu o coloană repetată și contorul acesteia.