如何根据 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
用户 ID 1 从 3 到 5 活跃,但从 6 到 7 不活跃,然后从 8 到 9 再次活跃。
用户 ID 1 活跃了 3 分钟:(5-3 + 9-8) = 3
用户 ID 2 活跃了 2 分钟:4-2 = 2
如何使用 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
我目前正在通过心跳记录用户的活动时间。它像这样存储在 table 中:
用户编号 | 一天中的分钟数 |
---|---|
1 | 3 |
1 | 4 |
1 | 5 |
1 | 8 |
1 | 9 |
2 | 2 |
2 | 3 |
2 | 4 |
用户 ID 1 从 3 到 5 活跃,但从 6 到 7 不活跃,然后从 8 到 9 再次活跃。
用户 ID 1 活跃了 3 分钟:(5-3 + 9-8) = 3
用户 ID 2 活跃了 2 分钟:4-2 = 2
如何使用 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 |