SSMS
 sql >> Base de données >  >> Database Tools >> SSMS

Comment obtenir la différence de temps MAX entre 2 lignes consécutives par valeur ?

Pouvons-nous utiliser LAG/LEAD à la place ?

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 choisira le prochain CreateDT (suivant défini par "la ligne qui a le même code et le plus grand CreateDt temporellement après le CreateDT de la ligne actuelle") par rapport à la ligne actuelle. DATEDIFF obtient la différence en secondes (choisissez une période appropriée). Il doit être enveloppé dans une sous-requête (ou CTE si vous préférez) car la fonction de fenêtre LEAD ne peut pas apparaître dans un MAX

Ce n'est peut-être pas particulièrement utile, bien sûr.. Ajoutez peut-être aussi le code :

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