我更喜欢用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;

09-10 00:31
查看更多