SSMS
 sql >> Baza danych >  >> Database Tools >> SSMS

Jak uzyskać maksymalną różnicę czasu między dowolnymi 2 kolejnymi rzędami na wartość?

Czy możemy zamiast tego użyć 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 wybierze następny CreateDT (następny zdefiniowany przez „wiersz, który ma ten sam kod i tymczasowo pierwszy większy CreateDt po CreateDT bieżącego wiersza”) względem bieżącego wiersza. DATEDIFF pobiera różnicę w sekundach (wybierz odpowiedni przedział czasowy). Wymaga zamknięcia w podzapytaniu (lub CTE, jeśli wolisz), ponieważ funkcja okna LEAD nie może pojawić się wewnątrz MAX

Może to oczywiście nie jest szczególnie przydatne. Być może dodaj też kod:

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



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. SQL Server:zmień ziarno tożsamości

  2. zwiń wszystko” lub przełącz konspekt w SQL Server Management Studio 2008

  3. Grupuj tabele według schematu w SSMS

  4. Błąd SQL Server Management Studio:skrypt nie powiódł się dla funkcji UserDefined

  5. Jak usunąć buforowane nazwy serwerów z okna dialogowego Połącz z serwerem?