You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2008 R2存储过程中如何实现连续登录天数统计?

实现连续登录天数累加的方案

这个需求我之前碰过好几次,核心就是要精准判断本次登录和上次登录的日期关系,同时还要避免用户同一天多次登录导致连续天数重复累加。结合你用的SQL Server(从getdate()能看出来),我给你调整一下存储过程里的UPDATE语句,完美实现这个功能:

UPDATE AccountsTable
SET 
    LogDate = GETDATE(),
    ConsecutiveDays = CASE
        -- 第一次登录(之前没有登录记录),直接设为1天
        WHEN LogDate IS NULL THEN 1
        -- 上次登录是昨天(日期连续),且本次不是当天重复登录,连续天数+1
        WHEN CAST(LogDate AS DATE) = DATEADD(DAY, -1, CAST(GETDATE() AS DATE)) 
             AND CAST(LogDate AS DATE) <> CAST(GETDATE() AS DATE) THEN ConsecutiveDays + 1
        -- 当天重复登录,保持原有连续天数不变
        WHEN CAST(LogDate AS DATE) = CAST(GETDATE() AS DATE) THEN ConsecutiveDays
        -- 登录中断(比如上次是前天及更早),重置为1天
        ELSE 1
    END
WHERE AccID = @identity;

关键逻辑说明:

  • 用CAST(xxx AS DATE)把登录时间转成纯日期格式,这样不管用户是昨天凌晨还是深夜登录,只要日期是昨天,就会被判定为连续登录
  • 专门加了CAST(LogDate AS DATE) <> CAST(GETDATE() AS DATE)的判断,防止用户同一天内多次登录时,连续天数被重复累加
  • 首次登录的情况直接处理LogDate IS NULL的场景,把连续天数设为1
  • 如果登录中断(比如隔了一天没登),就把连续天数重置为1,重新开始计数

举个例子验证你的场景:

  1. 第1天(2018-04-11)登录:LogDate设为当前时间,ConsecutiveDays变为1
  2. 第2天(2018-04-12)登录:判断上次日期是昨天,所以ConsecutiveDays加1变成2
  3. 第3天(2018-04-13)登录:同样判定日期连续,ConsecutiveDays变成3
  4. 如果第4天没登,第5天再登:此时上次日期和当前日期差2天,ConsecutiveDays重置为1

如果用户同一天内多次登录,比如2018-04-11登录两次,第二次登录时会触发“当天重复登录”的分支,ConsecutiveDays保持1不变,不会变成2,符合需求。

内容的提问来源于stack exchange,提问作者Plar625

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:10