SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Как да получите МАКСИМАЛНАТА времева разлика между всеки 2 последователни реда на стойност?

Можем ли да използваме 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 ще избере следващия CreateDT (следващ дефиниран от "реда, който има същия код и временно първия по-голям CreateDt след CreateDT на текущия ред") спрямо текущия ред. DATEDIFF получава разликата в секунди (изберете подходяща времева рамка). Трябва да се обвие в подзаявка (или CTE, ако предпочитате), тъй като функцията на прозореца LEAD не може да се появи в MAX

Може би не е особено полезно, разбира се.. Може би добавете и кода:

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

  2. Използване на таблицата непосредствено след създаването й:обектът не съществува

  3. Грешка в SQL Server Management Studio:Неуспешен скрипт за UserDefinedFunction

  4. ALTER DATABASE не успя, защото не може да се постави заключване в базата данни

  5. Показване на броя на редовете от SQL сървър до програма