【问题标题】:Consecutive days on a stored procedure in SQL Server 2008 R2?SQL Server 2008 R2 中存储过程的连续天数?
【发布时间】:2018-09-21 12:54:32
【问题描述】:

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

UPDATE AcccountsTable SET LogDate = getdate() WHERE AccID = @identity

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

例如:

Day 1: 2018-04-11 20:00
Day 2: 2018-04-12 15:30
Day 3: 2018-04-13 10:20
and etc ....

在这些连续天数中登录的用户帐户 ID 的总连续天数应为 3 天。

如果用户没有登录day 4 - 2018-04-14,但在第二天登录2018-04-15,则所有连续天数都应恢复为1

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

【问题讨论】:

    标签: sql-server sql-server-2008 stored-procedures


    【解决方案1】:

    使用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
    

    【讨论】:

    • 非常感谢,我要测试一下。但是,如果用户在连续一天内多次登录,则应仅将 +1 值添加到 ConsecutiveDays 列,并忽略该特定日期的其余登录。我不确定,但上述内容会阻止这种情况吗?再次感谢您!
    • 实际上,如果用户在同一天登录两次,我的原始答案会将 ConsecutiveDays 设置回 1。我已经对其进行了编辑并在案例中添加了另一个when 子句,因此如果用户在同一天多次登录,ConsecutiveDays 只会增加一次,并在同一天的下一次登录中保持这种状态。
    • @Plar625,cmets 部分不是询问后续问题的地方。您发布了一个问题,Zohar 回答了它。他甚至把它带到了你的第一级“哦,我忘了问......”你不应该在不了解它的作用的情况下使用他的代码,所以如果你花时间弄清楚这一点,你应该能够自己完成查询。如果您需要更多帮助,或者您发现自己有性能问题,则应通过提出新问题来解决这些问题。
    • 性能有点难以预测,因为它涉及许多因素。话虽如此,通常在语句中添加一些 case 表达式不会显着影响性能。
    • 太棒了!希望你有美好的一天;希望你今天过得很开心。谢谢!
    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多