簽到表:spa
需求:統計連續簽到的 用戶code
1.根據用戶和日期分組blog
select user_name, sign_date from user_sign group by user_name, sign_date order by user_name, sign_date
2.取出行號class
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 ;
3.使用日期作對比,有則疊加,沒有則不疊加date
datediff:返回2個日期之間的間隔天數select
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
4.取出連續簽到4天的用戶列表im
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;