with coin_table as (
select
uid
,date_format(dt,'%Y%m') as month
,case row_number()over(partition by uid, rk_tag order by dt)%7
when 3 then 3
when 0 then 7
else 1 end as coin_eachday
from (
select
uid
,dt
,date_sub(dt,interval rk day) rk_tag
from (
select
uid
,date(in_time) dt
,row_number()over(partition by uid order by date(in_time)) rk
from tb_user_log
where artical_id=0 and sign_in=1
and date(in_time) between '2021-07-07' and '2021-10-31'
) t
) t
)
select
uid
,month
,sum(coin_eachday) coin
from coin_table
group by 1,2
order by 2,1
关于连续第几天
- 假设一组日期数据为[0,1,2,4,7,8],我们想按照连续性分组为[0,1,2]、[4]、[7,8]
- 我们先做序号列[1,2,3,4,5,6](通过RANK OVER(uid)实现)
- 然后序号-日期数据=[1,1,1,0,-2,-2],得到能实现连续性分组的特征标签(即上面的三个分组111,0,-2-2)
- 按分组再加序号[1,2,3,1,1,2](通过RANK OVER(uid,特征标签) 实现)(每组内的排序序号,即第几个连续天)



京公网安备 11010502036488号