首页 新闻 搜索 专区 学院

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

0
[已解决问题] 解决于 2018-01-05 13:42

查询连续签到日期,每次签到奖励加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;--删除临时表

BlankCanvas的主页 BlankCanvas | 初学一级 | 园豆:6
提问于:2017-12-28 16:51
< >
分享
最佳答案
0

换个思路吧,虽然sql可以做这个,但做起来会很吃力

你直接把相关签到记录取出来在程序里面掰不光在写起来会简单很多,性能也会好些

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10374 | 2017-12-29 11:55

我也想放在程序里,对接人不允许。。。

BlankCanvas | 园豆:6 (初学一级) | 2018-01-02 17:56
其他回答(1)
0

以及后4日的签到日期所对应的奖励

后四日还没到来,不可能有签到记录,怎么奖励?

西漠以西 | 园豆:1670 (小虾三级) | 2017-12-28 17:00

给他预测能领多少

支持(0) 反对(0) BlankCanvas | 园豆:6 (初学一级) | 2017-12-28 18:15

这样的

支持(0) 反对(0) BlankCanvas | 园豆:6 (初学一级) | 2017-12-28 18:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册