题解 | #连续签到领金币#
连续签到领金币
https://www.nowcoder.com/practice/aef5adcef574468c82659e8911bb297f
select
uid,
month,
sum(day_coin)
from(
select
uid,
month,
case when cday%7 = 3 then sign_in+2
when cday%7 = 0 then sign_in+6
else sign_in end as day_coin
from(
select
uid,
sign_in,
date_format(dt,'%Y%m') as month,
dense_rank() over (partition by date_sub(dt,interval rk day) order by dt) as cday
from(
select
distinct uid, #一天签到多次的只保留一次
sign_in,
date(in_time) as dt,
dense_rank() over (partition by uid order by date(in_time)) as rk
from
tb_user_log
where
date(in_time) between '2021-07-07' #坑死了这里写7-01不通过
and '2021-10-31'
and sign_in = 1
and artical_id= 0
order by uid) as a) as b) as c
group by uid,month
order by month,uid

查看8道真题和解析