DECLARE @YA AS DATETIME = GETDATE(); WITH C AS ( SELECT ID,EMPLEADO,FECHA,NoSem, ROW_NUMBER() OVER (PARTITION BY EMPLEADO,FECHA ORDER BY ID) AS DUPLICADO FROM datos.dbo.RegistroDeEntradas ) DELETE FROM C WHERE DUPLICADO > 1 AND DATEPART(ISO_WEEK, @YA) = NoSem ;with cte as ( select * from Datos.dbo.RegistroDeEntradas cross apply (values (datediff(minute, cast( isnull(nullif([HORA DE ENTRADA], ''), [RETARDO]) as time), cast([HORA DE SALIDA] as time)))) M(m) where DATEPART(ISO_WEEK, @YA) = NoSem ) select EMPLEADO,ID,NoSem,timefromparts(SUM(m) / 60, SUM(m) % 60, 0, 0, 0) as [HORAS TRABAJADAS] from cte group by EMPLEADO,ID,NoSem;