查询连续签到日期,每次签到奖励加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;--删除临时表
小唯快跑啊
相关分类