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个回答

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

实际实现签到这种功能不会用纯SQL了实现图片说明

在最新的一条签到记录里面,用一个字段记录连续签到的次数就可以了。
例如昨天第一次签到,记录签到次数1
今天签到,在数据库里面查找最新的一条签到记录,查看签到次数为1,就可以知道今天是连续第二天签到了。

恩恩,这个我也想过,不过现在问题不是这个,我是想优化那个创建表去记录后几天的签到情况然后再把表删掉的语句,因为创建表再删掉感觉太奇怪了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
演示连续签到奖励功能
第五季 thinkphp5整合百度编辑器等第五季
thinkphp5连续签到;php连续签到奖励不同积分案例
最近项目有个需求,需要实现连续签到奖励不同积分,中间断签则重新计算的功能,弄了一晚上,写了一个雏形demo,记下开发思路。 需要考虑部分: 1,会员基数大,如果每个人的签到记录都存入数据库,每次签到查询会造成较大的查询和写入压力 2,签到不同天数积分的获取问题 初步设定优化方案:每次会员签到,触发删除签到记录,删除掉该会员数据两天前的签到数据,保留前一天的签到作为签到存档 开发思路:会员...
连续签到奖励代码讲解分享
第五季 thinkphp5整合百度编辑器等第五季
连续签到奖励前端页面简单分享
第五季 thinkphp5整合百度编辑器等第五季
签到 连续
@Servicepublic class SigninLogServiceImpl implements SigninLogService { Logger logger = LoggerFactory.getLogger(SigninLogServiceImpl.class); @Autowired UserMapper userMapper; @Autowired SigninLogMappe...
sql语句优化的问题
select (select dmmc from dwdmb where dmdma.dwdm)) as dmmc,rq,name from lista rnwhere rq = (select max(rq) from lista where name='wz') and name='wz'rnrn我算了一下,大概执行一遍需要15~32毫秒之间,关键是我要执行100~400遍,不停的更换name变量rnrn有没有好的方法优化下查询速度
SQL语句优化的问题
前天去UTStarcom面试,被问到一个这样的问题,问我有没有*=操作来做性能优化查询,我当时就蒙了,性能优化的工作我也做过,可我确实没听说这个操作,更别说使用了。其他问题都回答挺好的,就这个问题让我郁闷了两天了。哪位高手能否指点一下。
优化Sql语句问题
做报表时查询的数据量很大,响应很慢,通常怎么处理?rn对Sql查询语句进行优化通常有哪些做法啊?
优化SQL语句的问题
表TABLENAME,列MOVALUE M1VALUE …… M11VALUE,staticdate,stationidrn需求是 rnSELECT COUNT(M0VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid rnSELECT COUNT(M1VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid rnrn……rnSELECT COUNT(M11VALUE) FROM TABLENAME WHERE M0VALUE!=0 AND M0VALUE IS NOT NULL and month(staticdate)=@month and stationid = @stationid rnrn然后在把这11条值相加。rn但月份有3个,stationid有多个。这样的话就需要执行N*11次SQL语句,这样性能太低了。有没有什么好办法可以不用分11次去执行,一次就可以把这11列求出并相加?rn不知道我表达是否够明白,望各位大侠赐教啊!
简单sql语句查询实现连续签到,积分增加
我是个萌新,百度是看见大佬们写的各种判断日期,基本上是不明白了,于是慢慢先逻辑,自己解决 建个表,自己 sign签到表 id 主键自增长 user_id 签到人id time 签到时间 signs 连续签到天数 integral 积分 CREATE TABLE `sign` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_id` b...
sql 得到连续签到天数及总签到天数
DECLARE @days INT SET @days = 0 DECLARE @curr_day DATETIME --创建day用于储存连续签到日期SET @curr_day = GETDATE() --curr_day为当前日期 WHILE EXISTS(SELECT null FROM Mall_MemberSign_Log WHERE [MemberId]=11514 AND DAT
当月签到连续天数
/** * 当月签到连续天数 * @param signDataList 当月签到日期数据(日期按从前到后排序) * @return */ public static int consecutiveDays(List signDataList){ int cint = 0; if(null == signDataLis
连续签到7天的功能设计
感觉一张表就够了,最后签到日期,连续签到总数。 签到,先判断最后签到日期是不是昨天?是昨天,连续签到总数加+1;不是昨天,连续签到总数变成1。 至于奖励问题,很好算,比如说周日这天,最后签到日期是昨天,然后连续签到总数-6大于等于0,那就说明满足奖励了
微信商城签到天数sql语句
今天写到积分签到功能,从开始进行需求分析的时候就觉得积分签到最麻烦,平时在使用签到功能觉得点一下签到按键就好了,今天写起来弯弯绕绕的觉得很是麻烦,先把刚写完的一个功能分享出来吧。主要采用MVC框架。微信商城签到天数sql语句:
求一个查询连续签到天数的sql
表中数据结构如下rnuser_id daternrn1 2015-06-01rn2 2015-06-01rn2 2015-06-02rn2 2015-06-18rn2 2015-07-12rn2 2015-07-13rn2 2015-07-13rn2 2015-07-13rn2 2015-07-14rn2 2015-07-15rn3 2015-07-10rn3 2015-07-14rn3 2015-07-15rn3 2015-07-15rn3 2015-07-15rn3 2015-07-15rn4 2015-07-13rnrn怎么查询出当前连续签到天数,rnrn比如user_id =2 的已经连续签到4天,最后连续签到日期为2015-07-12,2015-07-13,2015-07-14,2015-07-15rnrnuser_id =3 已经连续签到2天,最后连续签到日期为2015-07-14,2015-07-15rnuser_id =4 没有签到,连续签到天数为0rnrn最后要得到的是rn用户ID,连续天数rn 1 0rn2 4rn3 2rn4 0rnrn要将查询的结果更新到到另一个表中,最好能高效点,谢谢各位!rn
sql语句的叠加问题!在线等~~~~~~~~~~~~~~~~~~~~
我的sql语句的参数有:rn选择框传回的值searchioce(搜索的选项:文章标题artititle或发表人username)rn文本框传回的值searcontent(填写的是文章标题或发表人的信息)rnsql语句是sqlcontent=" "+"'"+searchioce+"'"+" like '%"+searcontent+"%'";rnrn选择框传回的值eardepart(搜索的部门)共有3个选择 0(所有部门包括1、2)1(管理) 2(经营)rnsql语句是sqldepart=" and departid="+"'"+seardepart+"'";rn主sql语句是 condition="select * from article where";rnrn我不知道怎么把这三个sql语句连接起来,问题是如果其中有一项如:rn文章标题或发表人的信息searcontent不添该怎么处理?rn部门选择所有部门不添该怎么处理?(我的数据库只有1和2)rn以上字段全是 文本.rn
一个简单的问题,关于叠加的SQL语句
10.24 79.08 2005-08-03 14:01:00.000rn32.30 43.08 2005-08-03 14:02:00.000rn45.32 79.65 2005-08-03 14:03:00.000rn......rn12.24 54.78 2005-08-03 14:03:00.000rn23.45 79.08 2005-08-03 15:00:00.000rnrn如何将时间段2005-08-03 14:01:00.000到2005-08-03 15:00:00.000的两列数值分别求和并除以60,rnSQL语句如何写?rn谢谢啦!rn
签到,打卡领取积分,记录连续签到,获取签到排名。
签到,打卡,奖品兑换
项目中的问题总结——签到取连续签到次数
public int getUserSignInDays(Long userId,int todaySignInTimes) {//当天签到时间         //定义一个数组用来存放当月签到的时间         ArrayList signInTimes = talentIntegralRecordDao.getCurrentMonthSignInTimeByUserId(userId)
DB2 SQL语句优化的问题
现有三张表a、b、crna,c表是配置表rna表中有数据5千条rnc中有数据20万条rnb中有数据30万条rnrn现在从b表中取出一定的数据,并且从a、c表中把其相关的信息都取出来。rn三张表join,数据这么多,效率太慢rn如何优化
sql 语句优化 问题? 求助!
SELECT 字段1 rn FROM 表 WHERE (...) AND 字段1=function()rnrn字段1有可能的值 为 0 或者 -1rn function 返回 0 或者 -1 rnrn这样的速度太慢了 请高手帮忙
请教sql语句优化的问题。
[code=SQL]rnSELECT TechCode rnFROM TblSysRoom a JOIN TblBusSalesNote b ON a.RoomID=b.RoomID JOIN TblSysTech c ON b.TechnicianID1=c.TechnicianIDrnwhere a.RoomCode='005' AND b.TechnicianID1 IS NOT NULLrnUNION ALLrnSELECT TechCode rnFROM TblSysRoom a JOIN TblBusSalesNote b ON a.RoomID=b.RoomID JOIN TblSysTech c ON b.TechnicianID2=c.TechnicianIDrnwhere a.RoomCode='005' AND b.TechnicianID2 IS NOT NULLrnUNION ALLrnSELECT TechCode rnFROM TblSysRoom a JOIN TblBusSalesNote b ON a.RoomID=b.RoomID JOIN TblSysTech c ON b.TechnicianID3=c.TechnicianIDrnwhere a.RoomCode='005' AND b.TechnicianID3 IS NOT NULLrnrn[/code]rnrn这个语句能优化吗?
关于sql语句优化的问题
ID和时间做为联合主键, 给出各个ID的时间,利用id和时间一起作为查询条件 ,查找表中每一个id距离各自时间参数最近且大于等于的数据,希望有人能看懂[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/40.gif][/img]rn eg: rn 参数列rnid timern1 2016-07-26 08:00:00rn2 2016-07-26 06:00:00rn目标表rn id time rn 1 2016-07-26 08:00:00rn 1 2016-07-26 09:00:00rn 2 2016-07-26 08:00:00rn 2 2016-07-26 09:00:00rnrn查询结果类似 select id,time from table where (id=1 and time >='2016-07-26 08:00:00') or (id=2 and time >='2016-07-26 06:00:00')rn因为这张表数据量有上亿条,要把查询的时间控制在3秒以内,谁帮个忙看看有什么好的优化策略吗?
关于sql语句优化的问题!
要把user1.table1中不在user2.table1中的记录插入user2.table1中,使用如下的sql语句:rn insert into user2.table1 select * from user1.table1 where (key1,key2,key3) not in (select (key1,key2,key3) from user2.table1)rn 如果表table1内的记录数很多,达到十万级以上,速度难以忍受,大家有没有更好的方法?
关于SQL语句优化的问题
[img=https://img-bbs.csdn.net/upload/201311/18/1384759780_307979.jpg][/img]rnrnrn 这个SQL语句,最后查询出来的结果是五十六万条。rn rn 用时25秒。rnrn 我想优化一下,提高查询速度。rnrn 请问有什么办法,或者该从哪方面入手呀?rnrn 谢谢。
一条sql语句优化的问题?
select a.*,rn(select max(decode(wjsymc, 'DW', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) DW,rn(select max(decode(wjsymc, 'ND', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) ND,rn(select max(decode(wjsymc, 'KTXM', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) KTXM,rn(select max(decode(wjsymc, 'GQ', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) GQ,rn(select max(decode(wjsymc, 'SJCXS', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) SJCXS,rn(select max(decode(wjsymc, 'SJDW', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) SJDW,rn(select max(decode(wjsymc, 'BXR', wjsyz, null)) from epdm_bgwd_sy b where a.ttachment_journal_id=b.ttachment_journal_id) BXRrnfrom CD_ATTACHMENT_JOURNAL a where a.flid='003'rnrn如上sql,CD_ATTACHMENT_JOURNAL表中搜索出的信息要和epdm_bgwd_sy表搜索出行转列的数据合起来,有更好的方法吗?rnrnepdm_bgwd_sy表中有外键ttachment_journal_id,对应CD_ATTACHMENT_JOURNAL表中的主键。
投资源码 投资自动分红 签到奖励
自己看着下载吧 投资类的源码 分红什么的 测试可用
SQL语句优化,语法优化
SQL语句优化 速度第一 非常好的优化功能,希望分享
一个SQL语句优化 优化····
语句如下:rn[code=sql]rnrn select InDate,Stock.LotNo,Stock.ModelName,Stock.ModelNo,Type,Stock.LotQty,isnull(InQty,0) as InQty,isnull(OutQty,0) as OutQty,StockQty,isnull(StopQty,0) as StopQty,Stock.LotQty-isnull(inqty,0) as Subassy,Remark rn from @Stock as Stock left join StockOutStop on Stock.LotNo = StockOutStop.LotNorn left join @StockIn si on si.LotNo= Stock.LotNo and si.ModelNo=stock.ModelNorn left join @StockOut so on so.LotNo=Stock.LotNo and so.ModelNo=stock.ModelNorn where ( StockQty>0 or StockQty<0) or (Stock.LotQty-isnull(inqty,0)>0 or Stock.LotQty-isnull(inqty,0)<0)rn or( DATEDIFF(mm,OutDate,getdate())=0 rn --or(year(OutDate)=year(getdate()) and Month(OutDate)=Month(getDate()) rn and(StockQty=0 and Stock.LotQty-isnull(inqty,0)=0))rn[/code]rn下面是执行效率图:rn[img=http://img.my.csdn.net/uploads/201303/21/1363846323_8993.png][/img]rnrn该怎么优化?rn
SQL字段叠加问题?
现在又表中2字段:rnusername accessoriesrn A 附件1,附件2,,附件3,,rn A 附件4,,附件5,附件6,,rn A 附件7,附件8,,附件9,,rn B 附件1,,附件2,附件3,,rn B 附件4,,附件5,附件6,,rn B 附件7,附件8,,附件9,,rnrn现在要查询,同一个用户,上传了多少附件,每个数组键值算一个,空的不算,也就是说rn查询出来需要时这样:rnusername accesscountrn A 附件1,附件2,附件3,附件4,附件5,附件6,附件7,附件8,附件9rn B 附件1,附件2,附件3,附件4,附件5,附件6,附件7,附件8,附件9rn当然,如果能将后面的数组个数也给计算出来更好,如下:rnusername accesscountrn A 9rn B 9rn谢谢各位大侠了。。。。。。
SQL常用优化脚本,优化SQL语句
SQL常用优化脚本,优化SQL语句,可以大大加块查询的效率
ThinkPHP连续签到小案例
平时做网站开发的时候,是不是也遇到过会员连续签到送积分,比如我有一个加积分的规则是针对连续签到的,那么我们在实现这个功能的时候,我们面对的有一下几点注意:(1)连续签到,次数要累加,这就涉及到两个时间戳之间的判断(2)是否是本月的的签到,当然这点话,两个时间戳判断也就解决了,但是也要注意这个地方(3)连续就加1,反之就清0,还有就是之前没签到就生成一条签到的记录!下面我就贴出一段签到的实现代码,欢
mysql 连续签到7天 查询
select * from ( select p.id pid,p.name,p.create_time,u.id,u.mobile,u.realname,u.authname,u.register_time,u.register_ip from project p inner join user u on p.user_id = u.id and p.id in ( Select DIS
如何统计连续签到天数
假如签到表有如下字段:id(编号),userid(签到人),content(签到内容),time(签到时间),该如何统计某个会员的连续签到天数?我自己想的方法是在会员信息表加一个签到字段,签到一次该字段值加1,但问题是他某天没有签到,该字段值就应该重置为0,这该怎么操作呢,asp代码,求正解~
sql语句优化
sql语句优化,值得每个开发人员拥有,希望能帮助每一位人
oracle sql语句优化
oracle sql语句优化,sql语句优化策略和方法以及实例
SQL语句优化技术分析
SQL语句优化技术分析
SQL语句优化记录
维护的系统中有一个统计功能特别慢,需要计算十几分钟,今天分析后发现有一个sql语句执行了近4秒,特意针对SQL进行了优化,记下优化记录。 主要分为两步: 1.优化sql语句 2.建索引 大的sql语句就不贴了,找出其中最慢的一段 select a1.pid,a1.kfqnum ,a1.kfqdj,qsj,jsj,case when (jsj-qsj)/qsj &gt; 1 then...
SQL语句的执行顺序和优化
SQL语句的执行顺序: 查询中用到的关键词主要包含六个,并且他们的顺序依次为 : select–from–where–group by–having–order by 其中select和from必须按照顺序执行,其他关键词是可选的,这六个关键词的执行顺序: from–where–group by–having–select–order by, from:先确定从哪个表中取数据,所以最先执行from...
SQL语句优化
select * from ProductInfo where ClassID in(4,27,28,141,142,143,144,145,146,147,160,161,162) ORDER BY IDrn求优化上面这段SQL。
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符