yz199489 2017-12-28 08:34 采纳率: 100%
浏览 1529
已采纳

SQL语句优化(连续签到奖励叠加问题)

查询连续签到日期,每次签到奖励加1,奖励达到8个就不在增加(一直保持每次签到给8个)。要求在sql语句中拼接出昨日,今日,以及后4日的签到日期所对应的奖励。目前的sql语句如下(这种写法要创建和删除临时表有没有好的写法)

DECLARE @now DATETIME = GETDATE() ,
@count INT ,
@i INT= 0;

SELECT @count = COUNT(*)
FROM ( SELECT DATEDIFF(DAY, CreateTime, @now) a , --签到时间对比今天的差值
ROW_NUMBER() OVER ( ORDER BY CreateTime DESC ) b --排序字段
FROM T_SignRecord
WHERE UId = @UId
AND DATEDIFF(DAY, CreateTime, @now) > 0 --排除今天的签到记录
) T
WHERE a = b;

CREATE TABLE #temp --创建临时表
(
CreateTime DATETIME ,
SignRewardCount INT
);
WHILE @i < 6
BEGIN
INSERT INTO #temp
( CreateTime ,
SignRewardCount
)
VALUES ( DATEADD(dd, @i, DATEADD(dd, -1, @now)) ,
CASE WHEN @count = 0 THEN @i
WHEN ( @count + @i ) > 8 THEN 8
ELSE @count + @i
END
);

    SET @i = @i + 1;
END;

SELECT *
FROM #temp;

DROP TABLE #temp;--删除临时表

  • 写回答

4条回答 默认 最新

  • zy5756 2017-12-29 12:42
    关注

    应该一个表增加连续签到的次数和最后签到日期,通过最后签到日期和连续签到的次数查询即可(另建一个表用于查询连续签到的奖励)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题