Una delle situazioni più comuni quando si lavora con i database è quella dove si utilizza una chiave surrogata (un identity o un guid) come chiave primaria di una tabella e non si inserisce un indice univoco per la chiave naturale. Per fare un esempio, capita spesso che in una tabella di persone, si usi un campo numerico identity come chiave primaria, e non si metta indice univoco per il codice fiscale. Come risultato, può capitare di avere più record con lo stesso codice fiscale e questo può essere fonte di bug.
Se volessimo sanare questa situazione dovremmo cancellare i record duplicati lasciando un solo record per codice fiscale. Grazie alle window function di Sql Server, eseguire questo genere di query è estremamente semplice: usando la funzione Row_Number in combinazione con Over e Partition By possiamo creare dei gruppi per codice fiscale e dare un numero sequenziale per ogni i record del gruppo dove per ogni gruppo si parte da 1. In questo modo, per ogni gruppo ci basta cancellare i record con numero sequenziale maggiore di 1.
delete q from ( select *, Pos = row_number() over (partition by CodiceFiscale order by DataInserimento) from People ) AS q WHERE Pos > 1
In questo esempio, raggruppiamo i record per codice fiscale e li ordiniamo per data inserimento all'interno del gruppo. Ad ogni record viene assegnato un campo Pos con la posizione del record all'interno del gruppo. A questo punto vengono cancellati i record con Pos > 1, cioè quelli più recenti.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Escludere alcuni file da GitHub Copilot
Breaking the Legacy Barrier: how to Use AI to Modernize Applications
Utilizzare noopener e noreferrer nei link HTML
Gestire il ciclo di vita di AbortController in Javascript
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Raggruppare risorse in .NET Aspire
From Data to Insight: Exploratory Data Analysis with Python, VS Code and SQL MCP Server
Monitorare le tabelle di Azure SQL Database con Change Event Streaming
Abilitare il rolling update su Azure Functions flex consumption
Ricerca delle GitHub issue tramite operatori logici
Esporre tool MCP da API REST con Azure App Service


