我更愿意在MySQL中完成这项工作。
表:
tracker | user_id | timestamp | action
1 1 1234 1
2 2 1236 9
3 1 1237 2
我需要找到所有操作为1的用户,并从下一个操作中减去时间戳。意思是,用户1的1234时间戳将从他的1237时间戳中减去。
这个想法是计算用户在行动1上花费的时间,直到他们去其他地方。
获得第一个时间戳很简单。一个想法是记录tracker
值,然后执行子查询,以便再次弹出user_id,其中tracker
高于第一个。{1}}。在示例中:WHERE user_id = 1 AND tracker > 1
是否有更优化的解决方案?
答案 0 :(得分:5)
这可能会对你有所帮助。这将加入所有未来的行动
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;