WITH a AS (
SELECT uid, DATE(in_time) AS dt, ROW_NUMBER() OVER (PARTITION BY uid ORDER BY in_time) AS rn
FROM tb_user_log
WHERE artical_id = 0 AND sign_in = 1 AND DATE(in_time) BETWEEN '2021-07-07' AND '2021-10-31'
),

b AS (
SELECT uid, DATE_FORMAT(MIN(dt), "%Y%m" ) AS month, COUNT(*) AS cnt
FROM a
GROUP BY uid, DATE_SUB(dt, INTERVAL rn DAY)
ORDER BY uid, month
)

SELECT uid, month, SUM(CASE WHEN cnt <= 7 THEN
                            CASE WHEN cnt % 7 > 0 and cnt % 7 < 3 THEN cnt 
                                 WHEN cnt % 7 >= 3 and cnt % 7 < 7 THEN cnt+2 
                                 WHEN cnt % 7 = 0 THEN cnt+2+6 
                            END
                        ELSE
                            FLOOR(cnt / 7) * (7 + 2 + 6) +  
                            CASE WHEN cnt % 7 > 0 AND cnt % 7 < 3 THEN cnt % 7                                WHEN cnt % 7 >= 3 AND cnt % 7 < 7 THEN cnt % 7 + 2  
                                 WHEN cnt % 7 = 0 THEN 0  
                            END
                       END) AS coin
FROM b
GROUP BY uid, month
ORDER BY month, uid


# artical_id = 0 AND sign_in = 1
# DATE(in_time) BETWEEN '2021-07-07' AND '2021-10-31'
# COIN = 每日签到1金币+连续签到3、7天奖励金币
# GROUP BY uid
# ORDER BY month, uid