Suponiendo que uses sql como gestor...
Código SQL:
Ver originalCREATE PROCEDURE [dbo].[Duplicados]
AS
--INICIALIZAMOS LA TRANSACCION
BEGIN TRANSACTION
DECLARE @VALORDUPLICADO VARCHAR(20)
DECLARE @NUMVECESDUPLICADO INT
--Se declara el cursor principal que obtiene el valor
--del campo duplicado y el numero de veces que se repite
DECLARE CURSOR_DUPLICADOS CURSOR FOR
--usted debe reemplazar el nombre de la tabla y el nombre del
--campo por el cual va a eliminar este ejemplo lo realize con la tabla GIFCONSUMO
SELECT VEHPLACA AS ValorDuplicado, COUNT(1) AS NumVecesDuplicado
FROM GIFCONSUMO
GROUP BY VEHPLACA
HAVING (COUNT(1) > 1)
ORDER BY NumVecesDuplicado
--Recorre el cursor
OPEN CURSOR_DUPLICADOS
FETCH NEXT FROM CURSOR_DUPLICADOS
INTO @VALORDUPLICADO,@NUMVECESDUPLICADO
WHILE @@FETCH_STATUS = 0
BEGIN
--para controlar que no se borren todos los registros
--y se mantenga un valor en la tabla
DECLARE @CONTADOR INT
SET @CONTADOR =1
-- el tipo de dato depende del valor definido para la tabla
DECLARE @ID NUMERIC(18,0)
--se elimina el registro(s) duplicados pero se deja uno solo.
DECLARE CURSOR_BORRARDUPLICADOS CURSOR FOR
--se consulta los id de los valores duplicados
SELECT CONID AS ID
FROM GIFCONSUMO
WHERE VEHPLACA = @VALORDUPLICADO
--Recorre el cursor de boorado de registros
OPEN CURSOR_BORRARDUPLICADOS
FETCH NEXT FROM CURSOR_BORRARDUPLICADOS
INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
--ELIMINAMOS LOS REGISTROS DUPLICADOS
--MENOS EL ULTIMO REGISTRO
IF(@CONTADOR < @NUMVECESDUPLICADO)
DELETE GIFCONSUMO WHERE CONID= @ID
--aumentamos el contador para controloar no borrar
--el ultimo registro
SET @CONTADOR = @CONTADOR + 1
FETCH NEXT FROM CURSOR_BORRARDUPLICADOS
INTO @ID
END
--cierro y libero el cursor interno
CLOSE CURSOR_BORRARDUPLICADOS
DEALLOCATE CURSOR_BORRARDUPLICADOS
--cierro y libero el cursor principal
FETCH NEXT FROM CURSOR_DUPLICADOS
INTO @VALORDUPLICADO,@NUMVECESDUPLICADO
END
CLOSE CURSOR_DUPLICADOS
DEALLOCATE CURSOR_DUPLICADOS
--ingresa por este lado si ocurre error o al finalizar el proceso
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
COMMIT TRANSACTION
Solo cambia lo que necesites...