当前位置: 首页 > 面试题库 >

单个表中的SQL时间差

唐煜
2023-03-14
问题内容

我有一个带有用户登录数据的MySQL表。

用户| 日期| 类型
----- + --------------------- + ------
1 | 2011-01-05 08:00:00 | 登录
1 | 2011-01-06 09:00:00 | 登录
1 | 2011-01-06 10:00:00 | 登出
1 | 2011-01-06 09:50:00 | 登录

给定上表,我想通过添加一个称为工期的新单元格来计算注销日期和上一个登录日期之间的时间差。例如,登出日期为‘2011-01-06 10:00:00;
并且以前的登录日期为“ 2011-01-06 09:50:00”。

结果应该看起来像这样。type = login的行不应具有持续时间值。

用户| 日期| 类型 期间
----- + --------------------- + -------- + ----------
1 | 2011-01-05 08:00:00 | 登录| --
1 | 2011-01-06 09:00:00 | 登录| --
1 | 2011-01-06 10:00:00 | 登出| 10分钟
1 | 2011-01-06 09:50:00 | 登录| --

预先感谢,
mawo


问题答案:
SELECT x.*, TIMEDIFF(x.logout_date, x.login_date) as duration
FROM
(
SELECT a.user_id, a.`date` as logout_date, 
(SELECT MAX(b.`date`) FROM table1 b WHERE b.`date` <a.`date` 
and b.user=a.user and b.type = 'login') as login_date    
FROM table1 a WHERE a.type ='logout'
)x


 类似资料:
  • 给定一个单链表,其中包含一个指向头部的指针,一个指向尾部的指针。哪一个最费时? > 在开头插入节点

  • 问题内容: 我需要在T-SQL中将值转换为。该值采用格式,例如 我需要在T-SQL中进行转换。 我试过了 但这会引发错误。 “将nvarchar数据类型转换为datetime数据类型导致超出范围的值。” 任何的想法 谢谢 问题答案: 将格式重建为。

  • 问题内容: 我有一张桌子,它是: 当我提出错误的要求时,例如要为唯一列输入相同的值。“ id”正在增加…这是错误的id请求; 这是我的表结果; 请帮助我如何解决此问题,我想订购。顺序的.. 问题答案: 这就是序列的工作方式。 重要提示:为避免阻塞从同一序列中获取数字的并发事务,绝不会回退nextval操作。也就是说,一旦获取了值,就将其视为已使用且不会再次返回。即使周围的事务稍后中止,或者调用查询

  • 我目前正在实现一个链表,在一个删除元素的函数上遇到了一些问题。下面是整个功能。如果列表为空,则退出程序。如果列表只有一个元素,那么我只使用另一个函数

  • 我在使用Flink的SQL语法连接多个表时遇到了一些问题,其中至少有一个表具有时间属性列。 我有一个表 ,当 rowtime 用作 flink rowtime 时,它使用架构(id、value1、rowtime)。 我想将此表与使用模式(id, value 2)的表连接。连接必须在匹配时完成。 最后,我想通过使用滚动时间窗口对这个连接的结果进行分组。 仅仅使用SQL语法有可能做到这一点吗? 下面是