题解 | #连续签到领金币#

连续签到领金币

https://www.nowcoder.com/practice/aef5adcef574468c82659e8911bb297f

with t1 as(
SELECT
	uid,
	DATE ( in_time ) AS dt,
	row_number() over (
		PARTITION BY uid 
	ORDER BY
	DATE ( in_time )) AS rn,
	date_sub( DATE ( in_time ), INTERVAL row_number() over ( PARTITION BY uid ORDER BY DATE ( in_time )) DAY ) AS con_t 
FROM
	tb_user_log 
WHERE
	artical_id = 0 
	AND sign_in = 1 
	AND DATE ( in_time )>= '2021-07-07' and date(in_time)<='2021-10-31'
),	
t2 as (
select *, rank ()over (PARTITION by uid,con_t order by dt) as con_t1
 from t1),

t3 as (
select *,DATE_FORMAT(dt,'%Y%m') as month,case when con_t1 %7=0 then 7 when con_t1 %7=3 then 3 else 1 end as coin from t2)


select uid,month,sum(coin) as coin from t3 
group by uid,month

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务