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

Hur får man MAX tidsskillnaden mellan två rader i följd per värde?

Kan vi använda LAG/LEAD istället?

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 kommer att välja nästa CreateDT (nästa definierad av "raden som har samma kod och den temporärt första större CreateDt efter den nuvarande radens CreateDT") i förhållande till den aktuella raden. DATEDIFF får skillnaden i sekunder (välj en lämplig tidsram). Det måste slås ihop i en underfråga (eller CTE om du föredrar det) eftersom fönsterfunktionen LEAD inte kan visas i en MAX

Det kanske inte är särskilt användbart, förstås.. Lägg kanske till koden också:

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. Hur installerar jag SQL Server Management Studio 2012 (SSMS) Express?

  2. Gruppera tabeller efter schema i SSMS

  3. SQL Server Management Studio-anslutningen är som standard "master" när du väljer ett databasspecifikt objekt

  4. phpMyAdmin kan inte ansluta till MySQL-servern