RE:Calcular direfencia campo Hora entre registros
Hola de nuevo kinetic_brain:
El motivo por el que te está repitiendo la hora es porque estás seleccionando el MAX, como te comentaba lo que tienes que hacer es obtener el TOP 1 de los registros con una hora mayor a la que estás analizando, más o menos así:
declare @RCL table (rut varchar(5), fecha varchar(8), hora varchar(6), monto int)
insert into @RCL values ('A401', '20110209', '104425', 2333)
insert into @RCL values ('A462', '20110209', '175220', 3335)
insert into @RCL values ('A467', '20110209', '163106', 2998)
insert into @RCL values ('A467', '20110209', '101630', 3469)
insert into @RCL values ('A467', '20110209', '114139', 8334)
insert into @RCL values ('A467', '20110209', '121051', 20394)
insert into @RCL values ('A467', '20110209', '132419', 3642)
insert into @RCL values ('A467', '20110209', '142837', 2870)
insert into @RCL values ('A369', '20110209', '113846', 11602)
insert into @RCL values ('A369', '20110209', '113951', 2417)
SELECT
A.RUT,
A.fecha,
convert(datetime, substring(A.HORA, 1, 2) + ':' + substring(A.HORA, 3, 2) + ':' + substring(A.HORA, 5, 2), 108) AS HORA,
(
select top 1
convert(datetime, substring(B.HORA, 1, 2) + ':' + substring(B.HORA, 3, 2) + ':' + substring(B.HORA, 5, 2), 108)
from @RCL B where A.RUT = B.RUT and A.fecha = B.fecha and
convert(datetime, substring(B.HORA, 1, 2) + ':' + substring(B.HORA, 3, 2) + ':' + substring(B.HORA, 5, 2), 108) >
convert(datetime, substring(A.HORA, 1, 2) + ':' + substring(A.HORA, 3, 2) + ':' + substring(A.HORA, 5, 2), 108)
order by
convert(datetime, substring(B.HORA, 1, 2) + ':' + substring(B.HORA, 3, 2) + ':' + substring(B.HORA, 5, 2), 108)
) as HORA1,
monto
FROM @RCL A
order by RUT,
convert(datetime, substring(A.HORA, 1, 2) + ':' + substring(A.HORA, 3, 2) + ':' + substring(A.HORA, 5, 2), 108)
Con esto obtienes lo siguiente:
A369|20110209|1900-01-01 11:38:46.000|1900-01-01 11:39:51.000|11602
A369|20110209|1900-01-01 11:39:51.000|NULL|2417
A401|20110209|1900-01-01 10:44:25.000|NULL|2333
A462|20110209|1900-01-01 17:52:20.000|NULL|3335
A467|20110209|1900-01-01 10:16:30.000|1900-01-01 11:41:39.000|3469
A467|20110209|1900-01-01 11:41:39.000|1900-01-01 12:10:51.000|8334
A467|20110209|1900-01-01 12:10:51.000|1900-01-01 13:24:19.000|20394
A467|20110209|1900-01-01 13:24:19.000|1900-01-01 14:28:37.000|3642
A467|20110209|1900-01-01 14:28:37.000|1900-01-01 16:31:06.000|2870
A467|20110209|1900-01-01 16:31:06.000|NULL|2998
Como recordarás los registros con NULL marcan que ya no existen registros posteriores a la hora. Dale un vistazo a la consulta y si hay algo que no entiendas lo comentas.
Saludos.
Leo