首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mysql中计算事件之间的时间差

在mysql中计算事件之间的时间差
EN

Stack Overflow用户
提问于 2015-07-23 21:32:27
回答 1查看 389关注 0票数 2

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

如何计算特定用户的事件LOGINLOGOUT之间的时间差?我想要获得每个用户拥有的会话时间的合计(因此是每个LOGINLOGOUT会话之间的合计时间)。我知道可以使用datediff,但我不确定它的语法以及如何在多个用户之间使用它

最终的输出应该是这样的:

代码语言:javascript
运行
复制
+-------------+-------------------------+
| agent       | Total Session Time      |
+-------------+-------------------------+
| User - 194  | 00:30:00                |
| User - 195  | 00:40:00                |
+-------------+-------------------------+
EN

回答 1

Stack Overflow用户

发布于 2015-07-23 21:50:29

我的版本仅输出上次注销和登录操作之间的差异:

代码语言:javascript
运行
复制
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;

我使用了下面的表定义:

代码语言:javascript
运行
复制
CREATE TABLE `log` (
  `time` datetime DEFAULT NULL,
  `agent` varchar(50) DEFAULT NULL,
  `event` enum('login','logout') DEFAULT NULL
)

示例数据和输出

数据:

代码语言:javascript
运行
复制
+---------------------+-------+--------+
| 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结果:

代码语言:javascript
运行
复制
+-------+--------------------------+
| agent | timediff(t2.lot, t1.lit) |
+-------+--------------------------+
| u1    | 01:00:16                 |
| u2    | 00:02:06                 |
+-------+--------------------------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31588907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档