Tive um problema que foi assim:
tabela dados
ID | DATAINICIO |
A001 | 2011-01-01 |
A001 | 2011-01-01 |
A002 | 2011-01-01 |
A002 | 2011-01-01 |
A002 | 2011-01-01 |
A003 | 2011-01-01 |
Tinha várias tabelas com várias linhas duplicadas, como eram muitas, era inviável remover uma a uma na mão. Utilizei o script abaixo para remover os campos duplicados.
WITH cte AS ( SELECT [%CAMPO1%], [%CAMPO2%], row_number() OVER(PARTITION BY %CAMPO1%, %CAMPO2% ORDER BY %CAMPO1%) AS [rn] FROM [%TABELA%] ) DELETE cte WHERE [rn] > 1 |
No caso em questão, fica
WITH cte AS ( SELECT [ID], [DATAINICIO], row_number() OVER(PARTITION BY ID, DATAINICIO ORDER BY ID) AS [rn] FROM [dados] ) DELETE cte WHERE [rn] > 1 |
Não precisa informar todos os campos da tabela, no exemplo foi colocado dois somente para ter certeza que mais de um campo tem o mesmo valor, é para ter certeza que a linha toda está realmente duplicada, é possível colocar mais campos também.
Links que me ajudaram:
http://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server
http://www.codeproject.com/Articles/157977/Remove-Duplicate-Rows-from-a-Table-in-SQL-Server