【问题标题】:Getting next timestamp in MySQL在 MySQL 中获取下一个时间戳
【发布时间】:2011-11-30 20:23:13
【问题描述】:

我希望在 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 高于第一个。在示例中:WHERE user_id = 1 AND tracker > 1

有没有更优化的解决方案?

【问题讨论】:

    标签: php mysql


    【解决方案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; 
    

    【讨论】:

    • 我可以 +2 这个。我正在编写一个更丑陋的解决方案,中途停了下来,因为这更优雅。
    • 别担心 Ben Lee,我也给了它我的 +1 ;D
    猜你喜欢
    • 2018-05-04
    • 2016-03-19
    • 1970-01-01
    • 2020-03-14
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多