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

Hvordan får man den maksimale tidsforskel mellem 2 på hinanden følgende rækker pr. værdi?

Kan vi bruge LAG/LEAD i stedet?

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 vil vælge den næste CreateDT (næste defineret af "rækken, der har den samme kode og den midlertidigt første større CreateDT efter den nuværende rækkes CreateDT") i forhold til den aktuelle række. DATEDIFF får forskellen i sekunder (vælg en passende tidsramme). Det skal pakkes ind i en underforespørgsel (eller CTE, hvis du foretrækker det), fordi vinduesfunktionen LEAD ikke kan vises i en MAX

Det er måske ikke særlig nyttigt, selvfølgelig.. Tilføj måske også koden:

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. Eksport af databaser og tabeller med PhpMyAdmin

  2. Nginx med phpmyadmin forkert omdirigering efter login

  3. Fatal fejl:Kald til udefineret funktion mb_detect_encoding() i C:\apache\htdocs\phpmyadmin\libraries\php-gettext\gettext.inc på linje 177

  4. phpmyadmin 2002 fejl