mysql计算运行时长_MYSQL经典SQL之时长统计

概述

假设有一张表,记录了用户的登入、登出信息,我们需要根据这些信息统计用户的在线时长,相应的设置用户等级,就像挂QQ升级

数据如下:

mysql> select * from user_sessions;

+----+----------+-------+----------+----------+

| id | platform | usr | start | end |

+----+----------+-------+----------+----------+

| 1 | web | user1 | 08:30:00 | 10:30:00 |

| 2 | web | user2 | 08:30:00 | 08:45:00 |

| 3 | web | user1 | 09:00:00 | 09:30:00 |

| 4 | web | user2 | 09:15:00 | 10:30:00 |

| 5 | web | user1 | 09:15:00 | 09:30:00 |

| 6 | web | user2 | 10:30:00 | 14:30:00 |

| 7 | web | user1 | 10:45:00 | 11:30:00 |

| 8 | web | user2 | 11:00:00 | 12:30:00 |

| 9 | app | user1 | 08:30:00 | 08:45:00 |

| 10 | app | user2 | 09:00:00 | 09:30:00 |

| 11 | app | user1 | 11:45:00 | 12:00:00 |

| 12 | app | user2 | 12:30:00 | 14:00:00 |

| 13 | app | user1 | 12:45:00 | 13:30:00 |

| 14 | app | user2 | 13:00:00 | 14:00:00 |

| 15 | app | user1 | 14:00:00 | 16:30:00 |

| 16 | app | user2 | 15:30:00 | 17:00:00 |

+----+----------+-------+----------+----------+

我们的站点有两个入口:web端和app端

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

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

获取用户的重叠时间段中最早的起始时间

获取用户的重叠时间段中最晚的结束时间

前两步的起始时间与结束时间合并,得到综合的时间段,再进行统计

第一步:

查询用户名、起始时间

其中起始时间需要满足的条件是:不包含于其

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值