如何获取每个值的任意 2 个连续行之间的最大时间差?

How to Get the MAX Time Difference Between Any 2 Consecutive Rows Per Value?

我如何根据下面的 CTE,根据代码提取任意两个连续行/[位置] 之间的最大 CreateDT 差异:

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

我们可以用 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(下一个由 "the row that has the same code and the temporally first greater CreateDt after the current row's CreateDT" 定义)。 DATEDIFF 获取以秒为单位的差异(选择合适的时间范围)。它需要包含在子查询中(或者 CTE,如果你愿意的话)因为 window 函数 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