假设我有一个具有以下结构的表:
如何为特定用户计算事件LOGIN
和LOGOUT
之间的时差?我希望获得每个用户拥有的会话时间的总和(因此,每个LOGIN
和LOGOUT
会话之间的时间总和)。我知道可以使用datediff
,但我不确定语法以及如何将它与多个用户一起使用
最终出局将是:
+-------------+-------------------------+
| agent | Total Session Time |
+-------------+-------------------------+
| User - 194 | 00:30:00 |
| User - 195 | 00:40:00 |
+-------------+-------------------------+
答案 0 :(得分:0)
我的版本仅输出上次注销和登录操作之间的差异:
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 |
+---------------------+-------+--------+
选择结果:
+-------+--------------------------+
| agent | timediff(t2.lot, t1.lit) |
+-------+--------------------------+
| u1 | 01:00:16 |
| u2 | 00:02:06 |
+-------+--------------------------+