我在 mysql 中有下表,我正在尝试查询它
id | type | dt | seqid
--------------------------------------------
1001 | login | 2017-07-11 01:52:39 | 1
1001 | change | 2017-07-11 01:53:07 | 2
1001 | logout | 2017-07-11 01:53:21 | 3
1002 | login | 2017-07-11 14:08:20 | 1
1002 | logout | 2017-07-11 14:08:28 | 2
--------------------------------------------
我本质上需要显示根据 id 分组的每个事件(类型)之间的时间差。输出应该是这样的:
1001 | Login | 0 (0 calculated since login is the starting event)
1001 | change | 28 (difference between login and this event)
---------------------
等等。
我编写了以下查询
SELECT
curr.id,
curr.type,
TIMESTAMPDIFF(SECOND,curr.dt , prev.dt) as diff
FROM
sys.rep AS curr
LEFT JOIN sys.rep AS prev ON prev.seqid = (
SELECT min(seqid)
FROM sys.rep WHERE seqid > curr.seqid and id = curr.id
);
该查询对于一个 id 可以正常工作,但对于多个 id 则失败。如有任何帮助,我们将不胜感激。
最佳答案
例如
SELECT a.*
, timediff(b.dt,a.dt) diff
FROM
( SELECT x.*
, MIN(y.dt) next
FROM my_table x
JOIN my_table y
ON y.id = x.id
AND y.dt > x.dt
GROUP
BY x.id
) a
JOIN my_table b
ON b.id = a.id
AND b.dt = a.next;
关于mysql - 查询返回事件之间的时间差,按 id 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043385/