none
Running Total con fechas

    Question

  • Hola 

    Tengo una tabla que tiene un campo ID y una Hora y deseo construir un Transact SQL  que la recorra y me obtenga la diferencia horaria entre el registro Actual y Registro Anterior.

    Ejemplo

    ID - 1 Hora 12:10 

    ID - 1 Hora 12:40 (Requiero acá me salga la resta de las dos horas es decir 30 que en este caso son Minutos)

    ID - 1 Hora 13:15 (Requiero acá me salga la resta esta horas menos la penúltima 35 Minutos) y asi ...

    Alguien me podría ayudar 

    • Moved by Naomi N Thursday, August 01, 2013 2:08 AM Better answer can be here
    Thursday, August 01, 2013 1:44 AM

Answers

  • Eis uma possível solução, utilizando a função row_number():

    ;with NUMERADO as (
    SELECT ID, Hora, row_number() over (partition by ID order by Hora) as Seq
      from Tabla
    )
    SELECT N1.ID, N1.Hora as [Hora 1], N2.Hora as [Hora 2],
           DateDiff(minute, N1.Hora, N2.Hora) as [Diferença (min)]
      from NUMERADO as N1 inner join
           NUMERADO as N2 on N1.ID=N2.ID and N1.Seq=N2.Seq-1

    Para testar:

    use tempdb;
    create table Tabla (ID int not null, Hora time not null);
    insert into Tabla values 
      (1,'12:15'), (1,'12:40'), (1,'13:15'),
      (2,'8:00'), (2,'12:00'), (2,'14:00'), (2,'18:00');

    José Diz.


    Belo Horizonte, MG - Brasil
    (Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)

    Thursday, August 01, 2013 9:56 AM