我宁愿在MySQL中完成这项工作.
表:
tracker | user_id | timestamp | action
1 1 1234 1
2 2 1236 9
3 1 1237 2
Run Code Online (Sandbox Code Playgroud)
我需要找到所有操作为1的用户,并从下一个操作中减去时间戳.意思是,用户1的1234时间戳将从他的1237时间戳中减去.
这个想法是计算用户在行动1上花费的时间,直到他们去其他地方.
获得第一个时间戳很容易.一个想法是记录该tracker值,然后执行子查询,其中user_id再次以tracker高于第一个弹出的位置再次弹出.在示例中:WHERE user_id = 1 AND tracker > 1
有更优化的解决方案吗?
这对你有帮助.这将加入所有未来的行动
SELECT t1.*,
t2.`timestamp` - t1.`timestamp`
FROM table t1
JOIN table t2
ON t1.user_id = t2.user_id
AND t2.tracker > t1.tracker
WHERE t1.`action` = 1;
Run Code Online (Sandbox Code Playgroud)
您可能希望扩展以添加条件以仅获取下一个条件.
这是一些临时查询,无法准确判断是否可行.这是假设只为该用户选择下一个.
SELECT t1.*,
t2.`timestamp` - t1.`timestamp`
FROM table t1
JOIN table t2
ON t1.user_id = t2.user_id
AND t2.tracker = (SELECT Min(tracker)
FROM table t3
WHERE t3.user_id = t1.user_id
AND t3.tracker > t1.tracker)
WHERE t1.`action` = 1;
Run Code Online (Sandbox Code Playgroud)