mysql在线时长统计

很明显,这些数据时间上是有重叠的,例如user1在08:30~10:30这个时间段内用三个web端和一个app端登录,但他的时长应该只能算作2个小时

要正确统计,我们需要三步:

获取用户的重叠时间段中最早的起始时间
获取用户的重叠时间段中最晚的结束时间
前两步的起始时间与结束时间合并,得到综合的时间段,再进行统计
第一步:
查询用户名、起始时间
其中起始时间需要满足的条件是:不包含于其它时间段,即不存在一条记录来满足条件“s>start且s<=end”
得到的结果可能存在重复,所以用distinct去重
这样找到的s就是用户重叠时间段的最早时间。如下
select distinct usr,start
from user_sessions as a
where not exists
(select * from user_sessions as b where a.usr=b.usr and a.start>b.start and a.start<=b.end);

第二步:
查询用户名、结束时间
这步于第一步一样道理,结束时间满足的条件是:不包含于其它时间段,即不存在一条记录满足“e>=start且e<end
结果如下:
select distinct usr,end
from user_sessions as a
where not exists
(select * from user_sessions as b where

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值