En lærebogskandidat til vinduesfunktionen row_number():
;MED x AS (VÆLG unikt_ID ,rækkenummer() OVER (OPDELING EFTER arbejder_ID,type_ID ORDEN EFTER dato) SOM rn FRA tbl )SLET FRA tblFRA xWHERE tbl.unik_ID =x.unik_ID OG x.rn> 1
Dette tager sig også af situationen, hvor et sæt duper på (arbejder_ID, type_ID)
deler den samme dato
.
Se den forenklede demo på data.SE .
Opdater med enklere version
Det viser sig, at dette kan forenkles:I SQL Server kan du slette fra CTE direkte:
;MED x AS (VÆLG unikt_ID ,rækkenummer() OVER (OPDELING EFTER worker_ID,type_ID ORDER BY dato) SOM rn FRA tbl )SLET xWHERE rn> 1