在mysql中计算面板数据的时差

在mysql中计算面板数据的时差,mysql,time,panel-data,Mysql,Time,Panel Data,我有一张表(称为“Sessions”),看起来像这样: user_id | action | datetime 1 | 1 | 2015-12-06 20:15:46 1 | 2 | 2015-12-06 20:15:56 2 | 1 | 2015-12-06 10:01:36 2 | 2 | 2015-12-06 10:01:39 1 | 1 | 2015

我有一张表(称为“Sessions”),看起来像这样:

user_id | action | datetime  
1       |  1     |  2015-12-06 20:15:46  
1       |  2     |  2015-12-06 20:15:56  
2       |  1     |  2015-12-06 10:01:36  
2       |  2     |  2015-12-06 10:01:39  
1       |  1     |  2015-12-07 18:17:46  
1       |  2     |  2015-12-07 18:17:56  
2       |  1     |  2015-12-07 14:03:46  
2       |  2     |  2015-12-07 14:03:49  
我想使用mysql计算每个用户在每个活动上花费的秒数(“持续时间”),这是给定用户id在给定日期的datetime之差,得到:

user_id |  action |  datetime             | duration  
1       |   1     |   2015-12-06 20:15:46 |      10  
1       |   2     |   2015-12-06 20:15:56 |      NaN  
2       |   1     |   2015-12-06 10:01:36 |      3         
2       |   2     |   2015-12-06 10:01:39 |      NaN 

我可以让它为一个系列工作,但不是面板。谢谢大家!

解决方案包括两次交叉同一个表,一个对应于发生的“第一个动作”,另一个对应于“下一个动作”。然后,可以在查询的“on”部分表示这些条件:

select first_action.user_id, 
       first_action.action, 
       first_action.datetime,
       (next_action.datetime - first_action.datetime) duration
  from
  (select * from sessions) as first_action 
  left outer join (select * from sessions) as next_action
  on first_action.user_id = next_action.user_id
  and first_action.action + 1 = next_action.action
  and date(first_action.datetime) = date(next_action.datetime);
例如,像

SELECT x.user_id
     , x.action
     , x.datetime start
     , y.datetime stop
     , TIMEDIFF(y.datetime,x.datetime) duration 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.user_id = x.user_id 
   AND DATE(y.datetime) = DATE(x.datetime) 
   AND y.action = 2 
 WHERE x.action = 1 
 ORDER 
    BY user_id
     , start;

是否根据给定用户id的操作1和操作2的日期时间差计算持续时间?是。我将修改我的问题。
选择session.action,session.datetime,(tableB.datetime-session.datetime)作为会话的持续时间,并将tableB.action=(session.action+1)按session.action排序感谢大家的时间和帮助。这不起作用,因为你希望得到这些“NaN”:这意味着你正在穿过一张桌子,而另一边一无所有:因此需要一个左外连接或右外连接来完成此操作。op确实提到了“在给定的一天”。也许这可以用于解决我错过了这一部分,谢谢你让我知道。我将在一段时间内进行编辑,同时纠正这个问题是的,我应该更准确地写这个问题-对于给定的用户,在给定的一天。谢谢劳尔,我想我可以用这个。我现在就试试。