玩家每日最大关卡进度分布

需求如题,但是要注意:每一天的最大关卡包括当天之前的所有最大通关进度,比如一个用户在1号通过的10关,2号没有打,也会算在2号第十关的人数里

第一次写的时候就没有考虑到这个问题,直接把每个用户每天的最大关卡查出来然后自连接去算前x天的最大关卡,但是这样如果玩家第二天没有关卡数据,第二天的关卡分布就没有这个用户,也就是玩家在这天至少要有活动关卡的行为才会算进来

修正方法:用一个date连接每天的关卡数据,然后用max over 窗口函数计算每天的最大关

 注::要考虑如何把用户缺失的“第二天”补上去,然后再max over就行,就是相当于再建一个完整日期的临时表,去CROSS JOIN 每日的关卡表,然后就把缺失的天补上啦

SELECT "$client",
       CASE
           WHEN pay."$uid" IS NOT NULL THEN 'pay_user'
           ELSE 'free_user'
       END AS pay_type,
       "$datesub",
       max_act_level,
       count(DISTINCT b."$uid") num
FROM
  (SELECT DISTINCT "$uid",
                   "$client"
   FROM app1242.track_user_view
   WHERE "$datesub"= format_datetime(now()- interval '1' DAY,'yyyy-MM-dd')

   ) t
JOIN
  (SELECT "$uid"
   FROM app1242.track_log_view
   WHERE "$action" IN ('$login',
                       'levelEnd')
     AND "$datesub" >= '2024-02-03'
     AND "$datesub" <= '2024-02-18'
   GROUP BY"$uid" ) a ON t."$uid"= a."$uid"
JOIN
  ( SELECT "$uid",
           day."$datesub",
           max(max_act_level) over (partition BY "$uid" ) max_act_level
   FROM
     (SELECT "$datesub"
      FROM app1242.track_log_view
      WHERE "$action" IN ('levelStart',
                          'levelEnd')
        AND "$datesub" >= '2024-02-03'
        AND "$datesub" <= '2024-02-18'
       
      GROUP BY "$datesub") DAY
   CROSS JOIN
     (SELECT "$uid",
             "$datesub",
             max(LEVEL) max_act_level
      FROM app1242.track_log_view
      WHERE "$action" IN ('levelStart',
                          'levelEnd')
        AND "$datesub" >= '2024-02-03'
        AND "$datesub" <= '2024-02-18'
       
      GROUP BY "$uid",
               "$datesub") act_level
   WHERE DAY."$datesub" >= act_level."$datesub" ) b ON a."$uid" = b."$uid"
LEFT JOIN
  (SELECT DISTINCT "$uid"
   FROM app1242.track_log_view
   WHERE "$action" IN('$pay')
     AND "$datesub" <= format_datetime(now()- interval '1' DAY,'yyyy-MM-dd')) pay ON a."$uid" = pay."$uid"
GROUP BY 1,
         2,
         3,
         4
ORDER BY 1,
         2,
         3,
         4

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值