客户端

统计24小时在线时长

所在版块: 后端技术 2016-08-17 17:43 [复制链接] 查看: 2409|回复: 0
原始数据表如下:

uid on_off_state(1:上线,2:下线) on_off_time
6195307332967349 1 2016-08-01 15:03:18
6195307332967349 2 2016-08-01 15:23:43
6195307332967349 1 2016-08-01 14:16:27
6195307332967349 2 2016-08-01 14:56:19


第一步:连接相邻两行记录,得到每次上下线的开始时间和结束时间
创建中间表
uid  on_off_state(1:上线,2:下线) start_time end_time
6195307332967349 12016-08-01 15:03:18 2016-08-01 15:23:43
6195307332967349 2 2016-08-01 15:23:432016-08-01 14:16:27
6195307332967349 12016-08-01 14:16:272016-08-01 14:56:19
6195307332967349 22016-08-01 14:56:19 2016-08-01 23:59:59

1. 初始化中间表
2. 更新中间表的结束时间字段,取大于当前行的第一条记录的开始时间作为结束时间,如果没有,则取一天最后时间

UPDATE $table AS a SET end_time=ifnull(
(select start_time from (SELECTid,uid,start_time FROM $table WHERE on_date='$statday') as b
WHERE b.uid=a.uid AND b.id>a.id ORDER BYb.start_time ASC LIMIT 1)
,'$enddate') WHERE a.on_date='$statday'

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码关注微信公众号

QQ|Archiver|手机版|小黑屋|mwt-design ( 沪ICP备12041170号-1

GMT+8, 2024-11-24 17:32 , Processed in 0.067987 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回列表