假设我有一个具有以下结构的表:

如何计算特定用户的事件LOGIN和LOGOUT之间的时间差?我想要获得每个用户拥有的会话时间的合计(因此是每个LOGIN和LOGOUT会话之间的合计时间)。我知道可以使用datediff,但我不确定它的语法以及如何在多个用户之间使用它
最终的输出应该是这样的:
+-------------+-------------------------+
| agent | Total Session Time |
+-------------+-------------------------+
| User - 194 | 00:30:00 |
| User - 195 | 00:40:00 |
+-------------+-------------------------+发布于 2015-07-23 21:50:29
我的版本仅输出上次注销和登录操作之间的差异:
select t1.agent, timediff(t2.lot, t1.lit)
from (select agent, max(time) lit
from log where event = 'login' group by 1) as t1
join (select agent, max(time) lot
from log where event = 'logout' group by 1) as t2
on t1.agent = t2.agent
group by 1;我使用了下面的表定义:
CREATE TABLE `log` (
`time` datetime DEFAULT NULL,
`agent` varchar(50) DEFAULT NULL,
`event` enum('login','logout') DEFAULT NULL
)示例数据和输出
数据:
+---------------------+-------+--------+
| time | agent | event |
+---------------------+-------+--------+
| 2015-07-23 15:40:18 | u1 | login |
| 2015-07-23 14:40:24 | u2 | login |
| 2015-07-23 16:40:34 | u1 | logout |
| 2015-07-23 16:40:39 | u2 | logout |
| 2015-07-23 16:44:19 | u2 | login |
| 2015-07-23 16:46:25 | u2 | logout |
+---------------------+-------+--------+select结果:
+-------+--------------------------+
| agent | timediff(t2.lot, t1.lit) |
+-------+--------------------------+
| u1 | 01:00:16 |
| u2 | 00:02:06 |
+-------+--------------------------+https://stackoverflow.com/questions/31588907
复制相似问题