SSMS
 sql >> Datenbank >  >> Database Tools >> SSMS

Wie erhalte ich den MAX Zeitunterschied zwischen 2 aufeinanderfolgenden Zeilen pro Wert?

Können wir stattdessen LAG/LEAD verwenden?

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 wählt das nächste CreateDT (als nächstes definiert durch "die Reihe, die den gleichen Code und das zeitlich erste größere CreateDt nach dem CreateDT der aktuellen Reihe hat") relativ zu der aktuellen Reihe. DATEDIFF erhält die Differenz in Sekunden (wählen Sie einen geeigneten Zeitrahmen). Es muss in eine Unterabfrage (oder CTE, wenn Sie es vorziehen) verpackt werden, da die Fensterfunktion LEAD nicht innerhalb eines MAX

erscheinen kann

Es ist natürlich vielleicht nicht besonders nützlich. Vielleicht fügen Sie auch den Code hinzu:

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