SQL连续登录领金币

:user_login_detail
字段:user_id login_ts

连续签到领金币
每天签到领1金币,连续签到3、7天,分别额外多领2和6个金币
连续签到7天重新累计
需求:求每个用户领取的金币数

 1 select user_id,sum(ct) + sum(coin) total_ct  from (
 2     select 
 3       user_id
 4       ,ct
 5       ,int(ct / 7) *8 + if((ct % 7) >=3,2,0) coin  -- 额外领取的金币
 6       
 7       from (
 8     
 9         select user_id,diff_date,count(*) ct
10          from (
11         
12             select user_id,login_date,datediff(login_date,rn) diff_date
13              
14              from (
15                 select 
16                  user_id,login_date,row_number() over(partition by user_id order by login_date) rn 
17                  from (
18                     select distinct user_id,date_format(login_ts,'yyyy-mm-dd') login_date from user_login_detail
19                 ) a 
20             ) b 
21         ) c group by  user_id,diff_date
22     ) d 
23 ) e group by user_id

 

posted on 2025-06-23 12:03  北京的小乔  阅读(21)  评论(0)    收藏  举报