我更喜欢用mysql完成这项工作。
表:
tracker | user_id | timestamp | action
1 1 1234 1
2 2 1236 9
3 1 1237 2
我需要找到所有操作为1的用户,并从他们的下一个操作中减去时间戳。也就是说,用户1的1234时间戳将从其1237时间戳中减去。
这个想法是计算用户在操作1上花费了多长时间,直到他们去了其他地方。
获取第一个时间戳很容易。一种方法是记录
tracker
值,然后对用户id再次弹出的位置执行子查询,其中atracker
高于第一个。在示例中: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;
您可能还需要扩展以添加一个条件,以便仅获取下一个条件。
这是一个特别的查询,无法准确判断是否有效
这假设只为该用户选择下一个。
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;