SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

Como obter a diferença de tempo MAX entre quaisquer 2 linhas consecutivas por valor?


Podemos usar LAG/LEAD em vez disso?
SELECT MAX(diff_sec) FROM
(
  SELECT 
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x

O LEAD escolherá o próximo CreateDT (próximo definido por "a linha que tem o mesmo código e o primeiro CreateDt maior temporalmente após o CreateDT da linha atual") em relação à linha atual. DATEDIFF obtém a diferença em segundos (escolha um período de tempo adequado). Ele precisa ser encerrado em uma subconsulta (ou CTE, se você preferir) porque a função de janela LEAD não pode aparecer dentro de um MAX

Talvez não seja particularmente útil, é claro .. Talvez adicione o código também:
SELECT x.code, MAX(x.diff_sec) FROM
(
  SELECT 
    code,
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x
GROUP BY x.code