我想根据“不活动时间”对 SQL 中的某些行进行 GROUP BY,这意味着注意时间戳之间的巨大差距以识别用户会话。
假设 sqlite 数据库中的此操作表:
_actions_
| id | userID | timestamp | actionType |
现在我可以查看所有用户操作及其按小时、月、年等分组的类型。
SELECT
userID, strftime('%H', timestamp), group_concat(actionType)
FROM
actions
GROUP BY userID, strftime('%H', timestamp);
然而,这并不完全是我想要的。考虑一下:
| 1 | 333 | 13.11.2014-20:59 | action6 |
| 2 | 333 | 13.11.2014-21:01 | action3 |
| 3 | 333 | 13.11.2014-21:47 | action5 |
我的示例合并到第 1 行和第 2+3 行,但是如果我们假设会话超时 30 分钟,我们应该得到第 1+2 行和第 3 行。任何 sql 想法?
如果 current_timestamp - last_timestamp > 30min,当然可以加载数据库并在 R、Pandas 等中检查每个用户,但这真的是要走的路吗?