求EXCEL表格统计连续签到的次数

求EXCEL表格统计连续签到的次数,第1张

=MAX(LOOKUP(0.1,0/(($A$2:$T$2=V2)+($A$3:$T$3=V2)+($A$4:$T$4=V2)),COLUMN($A$1:$T$1))-LOOKUP(0.1,0/(($A$2:$T$2=V2)+($A$3:$T$3=V2)+($A$4:$T$4=V2)+($A$1:$T$1="")=0),COLUMN($A$1:$T$1)),0)

签到功能主要是需要获取上次签到时间,然后进行比对,如果比较之后在零点之后,且大于24小时,就认为连续签到失败。

关键点:每次需要记录签到时间,这样以后无论是根据记录,还是相应算法都可以统计相关的签到记录。

签到功能核心就是时间的比较,只要比对好时间,然后封装签到方法,就可以轻松记录签到情况。

设计表结构时 多加一个字段 来存放连续签到天数, 每次 签到时更新这个字段   要简单的多

否则你需要 每个人 都循环判断前一天是否签到的方法来解决

参考代码

1  --循环法

declare @day int  = 1, --

 2 @userId int =1,  --用户id

 3 @count int = 0 ,  --连续签到多少天

 4 @isSinginToday int  --今天是否签到

 5 

 6 while  exists ( select * from  #SignInLog  

 7     where UserId  = @UserId and DATEDIFF(day ,createtime  ,getdate() ) = @day    )

 8 begin

 9     set @count = @count + 1      -- 【循环方法】

10     set @day = @day + 1  --        

11 end

12 

13 select @isSinginToday =COUNT(*)  from  #SignInLog    where UserId  = @UserId  and DATEDIFF(day ,createtime ,getdate() ) = 0  --今天是否登录

14     

15     

16 select  @isSinginToday , --当天是否签到

17 @count + @isSinginToday  -- 连续签到n天

如果数据库支持 row_number(), mysql  不支持此函数... 

可以用

declare @now datetime  = getdate() ,    

@count int ,

@userid int = 1 ,

@isSinginToday int 

select @count  = count(*) from (

    select  datediff( day  , CreateTime  , @now )         aa ,  --签到时间对比今天的差值

        row_number() over (order by createtime  desc )    bb    --排序字段 

    from  #SignInLog

    where UserId  = @userId   and  datediff( day , CreateTime , @now )  > 0  --条件排除今天的签到记录 

) T where aa = bb  

select @isSinginToday =COUNT(*)  from  #SignInLog    where UserId  = @UserId  and DATEDIFF(day ,createtime ,getdate() ) = 0  --今天是否登录

    

select  @isSinginToday , --当天是否签到

@count + @isSinginToday  -- 连续签到n天


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9550367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存