查詢連續簽到日期,每次簽到獎勵加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;--刪除臨時表
添加回答
舉報
0/150
提交
取消