-- with内容是 保证同一个用户在同一天多次登录只留下签到那一次的记录 with log_info as( select uid, date(in_time) log_date, sign_in, artical_id from ( select *, row_number() over(partition by uid,date(in_time) order by sign_in desc) rn from tb_user_log where date(in_time) >= '2021-07-07' and date(in_time)<'2021-11-1' and artical_id = 0 ) t where rn = 1 ) select uid, extract(year_month from log_date) month, sum(coin_per_day) coin from ( select *, case when rn%7=3 then 3 when rn%7=0 then 7 else 1 end coin_per_day from ( select uid, prim_day, log_date, row_number() over(partition by uid,prim_day order by log_date) rn from ( select uid, date_sub(log_date,interval (rank() over(partition by uid order by log_date)) day) prim_day, log_date from log_info where sign_in = 1 ) t1 ) t2 ) t3 group by uid,month order by month,uid