SQL Server 2008 R2中的存储过程连续几天?

Pla*_*625 0 sql-server stored-procedures sql-server-2008

当有人登录他的帐户时,我在存储过程中有以下行:

UPDATE AcccountsTable SET LogDate = getdate() WHERE AccID = @identity
Run Code Online (Sandbox Code Playgroud)

但是,我想在每个连续登录日添加一个新功能,以添加+1到我的新列(ConsecutiveDays)中AccountsTable.

例如:

Day 1: 2018-04-11 20:00
Day 2: 2018-04-12 15:30
Day 3: 2018-04-13 10:20
and etc ....
Run Code Online (Sandbox Code Playgroud)

对于在连续几天内记录的用户帐户ID,连续总天数应为3天.

如果用户未登录day 4- 2018-04-14但在第二天登录,2018-04-15则应将所有连续日期还原为1.

我在MSSQL Server 2008 R2上搜索了类似的存储过程解决方案但没有成功.我根本不擅长SQL,所以我非常感谢你的帮助!先感谢您!

Zoh*_*led 6

使用时不应该太难case:

UPDATE AcccountsTable 
SET ConsecutiveDays = 
    CASE WHEN CAST(LogDate as Date) = CAST(DATEADD(DAY, -1, GETDATE()) As Date) 
              AND ConsecutiveDays < 28 THEN 
        ConsecutiveDays + 1 
    WHEN CAST(LogDate as Date) = CAST(GETDATE() as Date) THEN
        ConsecutiveDays 
    ELSE 
        1 
    END,
    ChallengesCompleted = 
    CASE WHEN ConsecutiveDays = 28 
              AND CAST(LogDate as Date) = CAST(DATEADD(DAY, -1, GETDATE()) As Date)
    THEN 
         ChallengesCompleted + 1
    ELSE
         ChallengesCompleted
    END,
    LogDate = GETDATE()
WHERE AccID = @identity
Run Code Online (Sandbox Code Playgroud)

  • @ Plar625,评论部分不是要求跟进问题的地方.你发了一个问题,Zohar回答了.他甚至把它带到你的第一级"哦,我忘了问......"你不应该在不理解它的作用的情况下使用他的代码,所以如果你花时间去弄清楚它,你应该能够自己完成查询.如果您需要更多帮助,或者您发现存在性能问题,则应通过开始新问题来处理这些问题. (2认同)