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

连续签到领金币

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

WITH t as(
SELECT *
FROM tb_user_log
WHERE DATE(in_time) BETWEEN '2021-07-07' AND '2021-10-31'
AND artical_id = 0 AND sign_in = 1
),
t1 as(
SELECT DISTINCT uid,date(in_time) AS dt,
ROW_NUMBER()OVER(PARTITION BY uid ORDER BY date(in_time)) AS ranking
FROM t
),
t2 as(
SELECT uid,dt,ranking,
(dt - ranking) AS continue_dt
FROM t1
),
t3 as(
SELECT uid,dt,ranking,continue_dt,
ROW_NUMBER()OVER(PARTITION BY uid,continue_dt ORDER BY dt) AS continue_ranking
FROM t2
),
t4 as(
SELECT *,
(CASE WHEN continue_ranking % 7 = 3 THEN 3
WHEN continue_ranking % 7 = 0 THEN 7
ELSE 1
END) AS coin
FROM t3
)
SELECT uid,DATE_FORMAT(dt,'%Y%m') AS month,
SUM(coin) AS coin
FROM t4
GROUP BY uid,month
ORDER BY month,uid;

全部评论

相关推荐

点赞 评论 收藏
分享
01-24 08:13
已编辑
合肥工业大学 Java
程序员牛肉:没啥问题。标准的流水线简历,但是学历好一点,所以应该是有约面的机会的。 这段时间可以考虑把自己的两个项目彻底的理一理。争取能够讲清楚每一个功能点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务