问题描述
–库名 USA_LogServer
–表名 Tbl_Room_BattleResultEx_Log
–字段名字 LogDate 日期时间,格式 2018-07-11 09:18:45.000
–字段名字 ID 玩家账号
–字段名字 personalAttack 攻击值
–每一条记录代表一个玩家 参与了一场战斗,这场战斗的时间 和 攻击值是多少
–我要的查询语句是,在指定的时间范围内 例如 2018-07-11 09:18:45.000 到 2019-07-11 09:18:45.000 期间 ,
–统计出每个玩家一共参与了多少场战斗,按时间顺序以10场战斗为一个基准,
–统计每10场战斗的攻击值累计加在一起是否达到50万或50万以上,举例,
–玩家abc 参与了31场战斗,1到10场达到50万次攻击值,10到20场达到50万次攻击值,
–但是剩下的11场没达到50万次,那么他达到要求的记录就是2次 ,
–查询出来的结果展示就是 ID + 满足这个每10场战斗累计攻击值达到过超过50万次的次数统计 + 战斗总场次 。
–那么就是 abc 2 31
分析主要是按照时间分组,然后对小组进行统计
- 个人觉得分组条件是比较精妙的思路
- 每10局算一组,且10局游戏是由玩家的登陆时间升序决定的,这里用到了row_number()over()的分组排序功能,统计出每个玩家的参与的总局数
- 然后按照10局一组统计,关键是分组条件id ,(sn-1)/10,ID是玩家ID账号,(sn-1)/10 ,恰好可以分组,1到10局整除后的结果都是0,11到20整除后的结果都是1,依此类推
select id,s