签到表:

sql -- 获取连续签到的用户列表

需求:统计连续签到的 用户

1.根据用户和日期分组

select user_name, sign_date from user_sign group by user_name, sign_date order by user_name, sign_date

sql -- 获取连续签到的用户列表

2.取出行号

select user_name,
       sign_date,
       if(@tmp = user_name, @rownum := @rownum + 1, @rownum := 1) as num,
       @tmp := user_name
from (select user_name, sign_date from user_sign group by user_name, sign_date order by user_name, sign_date) a,
     (select @rownum := 0, @tmp := '') b  ;

sql -- 获取连续签到的用户列表

3.使用日期做对比,有则叠加,没有则不叠加

datediff:返回2个日期之间的间隔天数

select user_name,
       sign_date,
       if(@tmp = user_name and datediff(sign_date, @date) = 1, @rownum := @rownum + 1, @rownum := 1) as num,
       @tmp := user_name,
       @date := sign_date
from (select user_name, sign_date from user_sign group by user_name, sign_date order by user_name, sign_date) a,
     (select @rownum := 0, @tmp := '', @date := '') b 

sql -- 获取连续签到的用户列表

4.取出连续签到4天的用户列表

select * from (
select user_name,
       sign_date,
       if(@tmp = user_name and datediff(sign_date, @date) = 1, @rownum := @rownum + 1, @rownum := 1) as num,
       @tmp := user_name,
       @date := sign_date
from (select user_name, sign_date from user_sign group by user_name, sign_date order by user_name, sign_date) a,
     (select @rownum := 0, @tmp := '', @date := '') b  ) c where num=4;

sql -- 获取连续签到的用户列表 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-17
  • 2021-08-22
  • 2021-10-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-05
  • 2022-12-23
  • 2021-12-30
  • 2021-12-03
相关资源
相似解决方案