Array
(
)

Select do pós-anterior como fazer?

Pjava
   - 29 mar 2011

Uso sql Server 2005. Tenho em uma tabela um campo data e hora. Preciso fazer assim: Um somatório sempre do registro(campo datahora) posterior - menos o anterior, tipo assim:   ID    NOME         DATA ------------------------------------------------------ 1     José            2011-02-24 11:26:38.000 2     José            2011-02-24 11:26:45.000 3     José            2011-02-24 11:26:47.000   Preciso fazer com que o primeiro registro de minha query tenha um somatório de 7 segundos, que é a subtração de (2011-02-24 11:26:45.000 - 2011-02-24 11:26:38.000) e o próximo registro dar um total de 2 segundos que é a mesma regra e assim até terminar os registros. Não me pergunte para que essa babaquice, pois é coisa de Gerente de Projetos. Eu apenas faço o que mandam e nada mais.  

Pjava
   - 29 mar 2011

Resolvi assim. É só substituir pela sua tabela e seus devidos campos:   SELECT ID, Nome, Data,
DATEDIFF(ss,(SELECT TOP (1) Data FROM @t As TInt WHERE TInt.Nome = TOut.Nome
AND TInt.DATA < TOut.DATA ORDER BY Data DESC),Data) As Dif,
DATEDIFF(ss,(SELECT TOP (1) Data FROM @t As TInt WHERE TInt.Nome = TOut.Nome
AND TInt.DATA <= TOut.DATA ORDER BY Data ASC),Data) As Acumulado
FROM @t As TOut
ORDER BY ID

Bretas
   - 19 abr 2011

Cara, ao invés de tratar isso no select, vc ja pensou em criar um segundo campo para guardar a data que vc precisa subtrair?
Eu digo pq fiz uma rotina com o mesmo objetivo a pouco dias, e a performance usando select foi MUITO baixa.
Talvez não seja a solução mais correta, mas se vc gravar as duas datas garanto que vai "sofrer" menos, e olha que nem é um POG muito descarado... rs!