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

Come ottenere la differenza di tempo MASSIMA tra 2 righe consecutive per valore?

Possiamo invece usare LAG/LEAD?

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 sceglierà il successivo CreateDT (successivo definito da "la riga che ha lo stesso codice e il CreateDt maggiore temporaneamente dopo il CreateDT della riga corrente") rispetto alla riga corrente. DATEDIFF ottiene la differenza in secondi (scegli un intervallo di tempo adatto). Deve essere chiuso in una sottoquery (o CTE se preferisci) perché la funzione della finestra LEAD non può apparire all'interno di un MAX

Forse non è particolarmente utile, ovviamente. Forse aggiungi anche il codice:

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