sql >> Base de Datos >  >> Database Tools >> SSMS

¿Cómo obtener la diferencia de tiempo MÁXIMA entre 2 filas consecutivas por valor?

¿Podemos usar LAG/LEAD en su lugar?

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

LEAD elegirá el siguiente CreateDT (el siguiente definido por "la fila que tiene el mismo código y el CreateDt temporalmente más grande después del CreateDT de la fila actual") relativo a la fila actual. DATEDIFF obtiene la diferencia en segundos (elija un marco de tiempo adecuado). Necesita terminar en una subconsulta (o CTE si lo prefiere) porque la función de ventana LEAD no puede aparecer dentro de un MAX

Tal vez no sea particularmente útil, por supuesto. Tal vez agregue el código también:

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