Как получить максимальную разницу во времени между любыми 2 последовательными рядами на значение? - PullRequest
0 голосов
/ 09 октября 2019

Как я могу вытащить максимальную разницу CreateDT между любыми двумя последовательными строками / [Position], для КОДА, на основе CTE ниже:

WITH OccDiff AS
    (
        SELECT 
            CODE
            , CreateDT
            , ROW_NUMBER() OVER(PARTITION BY CODE ORDER BY CreateDT DESC) Position FROM Occs
    )

1 Ответ

0 голосов
/ 09 октября 2019

Можем ли мы использовать вместо этого 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...