如何根据 Presto SQL 中的心跳数据计算用户会话时间?

How can I calculate user session time from heart beat data in Presto SQL?

我目前正在通过心跳记录用户的活动时间。它像这样存储在 table 中:

用户编号 一天中的分钟数
1 3
1 4
1 5
1 8
1 9
2 2
2 3
2 4

如何使用 SQL (Presto) 查询进行计算?

输出应该是这样的:

用户编号 总分钟数
1 3
2 2

您可以尝试以下方法,它使用滞后函数在求和之前确定活跃期 (diff = 1)

SELECT 
    USERID, 
    SUM(diff) as TotalMinutes
FROM (
    SELECT
       UserId,
       (MinuteofDay - LAG(MinuteofDay,1,MinuteofDay) OVER (PARTITION BY UserId ORDER BY MinuteofDay)) as diff
    FROM
        my_table
    ) t
WHERE 
    diff = 1
GROUP BY 
    UserID;
userid TotalMinutes
1 3
2 2

View on DB Fiddle