我在 AdventureWorks 数据库中摆弄了一下,可能已经找到了一种方法来获得您正在寻找的东西(尽管我对此并不陌生,所以有更多经验和知识的人可能会有更好的主意)。但希望这提供了一些起点。我用 Row_Number 创建了 2 个 CTE,第二个 CTE 有 Row_Number-1 作为计数。然后加入这两个 CTE 并在 event_datetimes 上进行 datediff。
WITH Example_CTE (Row, UserID, Event_datetime)
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Row
,UserID
,Event_datetime
FROM table
ORDER BY UserID,Event_datetime DESC
)
,
Example_CTE2 (Row, UserID, Event_datetime)
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL))-1 AS Row
,UserID
,Event_datetime
FROM table
ORDER BY UserID, Event_datetime DESC
)
SELECT Example_CTE.UserID
,DATEDIFF(day, Example_CTE.Event_datetime, Example_CTE2.Event_datetime) as TimeDiff
FROM Example_CTE
left outer join Example_CTE2 on Example_CTE.row = Example_CTE2.Row