在表中,记录了用户 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