在表中,记录了用户 login/logout 的时间点(unix时间)。现在需要确定当日用户的在线时长总和,与平均在线时长。

简单的说,就是要求出匹配 userid 的 login/logout timestamp 的差值并求和。

问题在于:其一,某些用户是跨天 login 或者 logout 的,这样当天的日志就没有可以匹配的 userid_login / userid_logout 。

其二,如果有些重度用户长时间在线,例如跨三天;那么第二天就没有其 login/logout 的日志。这样数据将会丢失。

跨天的问题

这里将用户的游戏时间分为两部分。即,当天没 logout 记录,则使用 23:59:59 作为退出时间;当天没有 login 记录,则使用 00:00:00 作为上线时间。

一条记录中,最简单的计算公式是 userid_logout_timestamp - userid_login_timestamp。

根据之前分析的情况,这里可以分为三种情况:login/logout 记录匹配:c_timestamp - b_timestamp -> (end_timestamp - b_timestamp) + (c_timestamp - start_timestamp) - (end_timestamp - start_timestamp)。

只有 login 记录:end_timestamp - b_timestamp

只有 logout 记录: c_timestamp - start_timestamp

这里 (end_timestamp - start_timestamp) 就是整个线段,即一天的时间长度。

最后,所有记录求和,就得到公式:

( count(b)*end_timestamp - sum(b_timestamp) ) + ( sum(c_timestamp) - count(c)*start_timestamp ) - ( count(couple)*(end_timestamp - start_timestamp) )注: count(couple) 为 login/logout 成功匹配的次数。

-- 1.sql 计算用户 login/logout 总次数及 timestamp的时间总和。

SELECT COUNT(login_type),login_type,SUM(login_timestamp) FROM tablename20101010

GROUP BY svr_id,channel_id,login_type;

-- 2.sql 计算单个用户的 login/logout 分别次数。

SELECT user_id,login_type,svr_id,channel_id,COUNT(login_type) FROM tablename20101010

GROUP BY svr_id,channel_id,user_id,login_type;

-- 3.sql 计算单个用户的 login/logout 匹配次数。

SELECT user_id,login_type,svr_id,channel_id,FLOOR(COUNT(login_type)/2) FROM tablename20101010

GROUP BY svr_id,channel_id,user_id;

-- 4.sql 计算所有用户的 login/logout 匹配次数。

SELECT t1.svr_id,t1.channel_id,SUM(t1.user_couple_record) FROM

(SELECT user_id,login_type,svr_id,channel_id,FLOOR(COUNT(login_type)/2) AS user_couple_record FROM tablename20101010

GROUP BY svr_id,channel_id,user_id) AS t1

GROUP BY t1.svr_id,t1.channel_id

ORDER BY t1.svr_id,t1.channel_id ;注意1:在 3.sql 中:这里是统计单个用户的所有 login/logout 记录,之后除以2。使用了函数 FLOOR() 向下取整,求出成功匹配次数。注意2:在 4.sql 中:对第一次查询结果进行第二次查询。这里必须对第一次结果使用别名,这样在内存(缓存??)就生成了一张新的表。

这里创建表别名的 AS 可以省略。

最后,最后在把上面结结果组合一下,就可以用一条 SQL 语句完成求和了。

跨多天的问题

还没有好的解决方法

MYSQL 函数

时间函数Date(date) :取时间日期 yyyy-mm-dd

DATEDIFF(date01,date02):去两个时间间隔几天

FROM_UNIXTIME(1111111):timestamp 转为 yyyy-mm-dd HH:MM:SS

UNIX_TIMESTAMP('yyyy-mm-dd HH:MM:SS'): yyyy-mm-dd HH:MM:SS 转为 :timestamp

格式化函数ROUND(1111.233363,N):保留 N 位小数,四舍五入 ROUND(12.567)=12.57

TRUNCATE(222.6666,N):保留 N 位小数,截取 TRUNCATE(22.6666,2)=22.66

FLOOR(3.7) 向下取整 FLOOR(3.7) = 3

CEIL(4.5) 向上取整 CEIL(4.3) = 5

mysql 统计时长_使用 mysql 统计平均用户在线时长相关推荐

  1. mysql 运行sql 编码_关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题...

    关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题 本人小白一名, 最近碰到了一个问题, 在 navicat 导入 MySQL 文件时, 报出 MySQL 找不到 u ...

  2. 统计app用户在线时长_优质的APP推广渠道,应该如何筛选?

    本文3187字,阅读时间约8分钟 随着移动互联网行业的快速发展,APP的推广渠道越来越多样化,但是对于APP运营推广人员来说,渠道的质量远比数量更加重要,有时候投放一百个普通渠道都不如投放一个优质渠道 ...

  3. 统计app用户在线时长_「云工作普及系列」2.如何实时统计工作时长,提高工作效率

    记上节我们讲了[1.如何注册云工作平台]之后,接下来一起探索下该平台提供的各个产品功能.今天主要讲一下如何它的实时统计工作时长是怎么实现的? 我们先来了解一下它的工作时长实时统计的功能. 一,从web ...

  4. mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题

    在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR  ...

  5. mysql登陆1130错误_解决MySQL远程登录时出现ERROR 1130错误问题_MySQL

    在用mysql进行远程连接时出现下列错误 [root@openfire ~]# mysql -u root -h mysql.clvn.com.cn -p Enter password: ERROR ...

  6. java 统计在线时长_如何有效统计app用户在线时长?

    Android平台: sdk版本v5.2.0及之后: app的单次使用时长=本次启动的结束时间减去本次启动的开始时间,即end_time减去start_time. 如果在本次启动过程中,应用退到后台运 ...

  7. 如何用mysql创建orders表_《MySQL必知必会》学习笔记

    本书所用的表: 68.png 67.png 66.png 65.png 64.png 63.png 第一章:了解SQL 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 数据库软件:DBM ...

  8. mysql 中有什么命令_常用mysql命令大全

    常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...

  9. mysql 5.6参数_初识 MySQL 5.6 新功能、参数

    摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...

最新文章

  1. μCos-ii学习笔记1_概述
  2. 【软考】2017年11月软件设计师上午真题9-12题答案解析
  3. php非,通过非数字和字符的方式实现PHP WebShell
  4. zabbix中常用到的几个key:
  5. Android-Activity中的onNewIntent()方法调用简析
  6. matlab有限元分析与应用_专栏 | UEL用户子程序开发步骤—有限元理论基础及Abaqus内部实现方式研究系列20...
  7. 在你的 Linux 桌面嵌入终端窗口
  8. 配置追踪者—Scylla v1(***测试工具)
  9. 【图像处理】基于matlab GUI图像直方图+滤波处理【含Matlab源码 839期】
  10. 贝叶斯分析思路 通俗讲法
  11. 赋能数字化生命力,让企业未来焕发青春
  12. 查看计算机的硬盘的命令,硬盘修复,教您怎么用系统命令检查硬盘
  13. 【触想智能】工业平板电脑触摸屏选择分析
  14. mysql assoc什么意思_mysql_assoc
  15. 反编译工具dava的使用
  16. DHTML Process Using MSHTML
  17. STM32软件定时器的设计
  18. 电脑一键重装Windows7系统步骤解答
  19. iTextSharp PDF .NET 设置图片大小为A4尺寸
  20. 初识Delphi---Delphi编程语言(1)

热门文章

  1. Python中的除法
  2. chgrp r mysql_Linux命令:chmod、chgrp、chown的区别
  3. 注意的种类有?区别是?心理学中的“随意”是什么意思?|小白心理-312/347考研答疑
  4. 直播技术学习笔记(一)
  5. JAVA的基础练习题
  6. 基本图算法时间复杂度
  7. mysql删除表编码字段_mysql 修改 添加 删除 表字段
  8. mock数据使用步骤
  9. 这是一个很好用的屏幕截图软件
  10. “is not a valid date and time ”错误提示 的【排除故障】