首页 新闻 会员 周边 捐助

[sql] 统计与上一次考试成绩的分差

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-23 11:08

  系统中提出新的需求,需求分析计算考生与上次考试成绩的分差,判断成绩提升是否过大:

数据如下:

    ID         Name    Score     Date

340321198611285950   吴赞赞   73.10   20080415
340321198611285950   吴赞赞   70.00   20080617
340321198611285950   吴赞赞   77.25   20080813
340321198611285950   吴赞赞   74.95   20090216
340321198611285950   吴赞赞   77.65   20090401
340321198611285950   吴赞赞   75.70   20090907

同一个ID在不同时间进行了多次考试,假如查询条件查询出来的结果为20090401的这条记录,要求计算出与上一次考试成绩(也就是20090216这次)的分差.

Seven_boy的主页 Seven_boy | 初学一级 | 园豆:50
提问于:2013-08-06 10:29
< >
分享
最佳答案
0

先按照日期排序,然后通过连接或者子查询,查询两次成绩的差,然后做统计~

收获园豆:6
幻天芒 | 高人七级 |园豆:37207 | 2013-08-06 10:57
其他回答(2)
0

直译:

declare @scr decimal(18,2)//当前分数
declare @preScr decimal(18,2)//上一次分数
declare @rn int//当前分数记录行数
set @scr = 0
set @preScr = 0

set @rn = 0
select @scr = isnull(Score,0),@rn=isnull(rn,0) from (select Score,row_number() over(order by Date desc) as rn  from tb  where Date = 20090401) as a
select @preScr = isnull(Score,0) from (select Score,row_number() over(order by Date desc) as rn  from tb) as b where b.rn = @rn + 1

select @scr - @preScr

收获园豆:2
Eddiew | 园豆:286 (菜鸟二级) | 2013-08-06 15:44

declare @scr decimal(18,2)//当前分数
declare @preScr decimal(18,2)//上一次分数
declare @rn int//当前分数记录行数
set @scr = 0
set @preScr = 0
set @rn = 0
if(exists(select count(1) from tb  where Date = 20090401))
begin
select @scr = isnull(Score,0),@rn=isnull(rn,0) from (select Score,row_number() over(order by Date desc) as rn  from tb  where Date = 20090401) as a
select @preScr = isnull(Score,0) from (select Score,row_number() over(order by Date desc) as rn  from tb) as b where b.rn = @rn + 1
end
else
begin
--其他处理
end
select @scr - @preScr

支持(0) 反对(0) Eddiew | 园豆:286 (菜鸟二级) | 2013-08-06 15:54
0

一楼说得很清楚了,2楼的太复杂了。

收获园豆:2
清海扬波 | 园豆:825 (小虾三级) | 2013-08-06 15:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册