获取MySQL中的下一个时间戳

djd*_*jdy 3 php mysql

我宁愿在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

有更优化的解决方案吗?

Pen*_*m10 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;
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)