为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2018-08-13 07:10:04
查询连续签到日期,每次签到奖励加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_SignRecordWHERE UId = @UIdAND DATEDIFF(DAY, CreateTime, @now) > 0 --排除今天的签到记录 ) TWHERE a = b;CREATE TABLE #temp --创建临时表(CreateTime DATETIME ,SignRewardCount INT);WHILE @i < 6BEGIN INSERT INTO #temp( CreateTime ,SignRewardCount)VALUES ( DATEADD(dd, @i, DATEADD(dd, -1, @now)) ,CASE WHEN @count = 0 THEN @iWHEN ( @count + @i ) > 8 THEN 8ELSE @count + @iEND);    SET @i = @i + 1;END;SELECT *FROM #temp;DROP TABLE #temp;--删除临时表
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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

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


查看完整回答
反对 回复 2018-08-23
  • 1 回答
  • 0 关注
  • 1005 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信