当前位置: 代码迷 >> Sql Server >> 求教一个SQL,从学生表里找出最高成绩,多谢
  详细解决方案

求教一个SQL,从学生表里找出最高成绩,多谢

热度:49   发布时间:2016-04-27 21:34:13.0
求教一个SQL,从学生表里找出最高成绩,谢谢!
有如下表格:
学号         姓名         成绩         日期
940001     王平           60           2006/5/7
940001     王平           70           2006/6/10
940001     王平           80           2006/9/22
940001     王平           90           2006/10/15
940002     张三           61           2006/11/2
940002     张三           76           2006/12/10
940002     张三           82           2007/1/22
940002     张三           92           2007/3/1
940003     刘威           82           2007/1/20
940003     刘威           82           2007/3/12
940004     赵亮           77           2007/1/20
...


要在上面表格中找出每位同学的最高分和最低分,以及成绩增长的记录
其中:1,同一学生只有两条记录,并且成绩相同的,显示最近一条记录的时间
            2,同一学生只有一条记录的,最高分和最的分显示相同的值
结果如下:
姓名         最高分         最低分       增长         取得最高分的日期
王平           90                   60             30           2006/10/15
张三           92                   61             31           2007/3/1
刘威           82                   82             0             2007/3/12
赵亮           77                   77             0             2007/1/20

求能够得出这样结果的SQL查询,谢谢各位高手了!!




------解决方案--------------------
select b.*,
a.日期 [取得最高分的日期]
from (select 学号,姓名,日期 from tb t where not exists(select * from tb where 成绩> t.成绩 and 日期> t.日期
))a
left join

(select 学号,姓名,
max(成绩) [最高分],
min(成绩) [最低分],
max(成绩)-min(成绩) [增长]
from tb
group by
学号,姓名)b

on a.学号=b.学号 and a.姓名=b.姓名
------解决方案--------------------
----wangdehao 正解吗??
create table tb(学号 varchar(10), 姓名 varchar(10), 成绩 int, 日期 datetime)
insert into tb select '940001 ', '王平 ', 60, '2006/5/7 '
union all select '940001 ', '王平 ', 70, '2006/6/10 '
union all select '940001 ', '王平 ', 80, '2006/9/22 '
union all select '940001 ', '王平 ', 90, '2006/10/15 '
union all select '940002 ', '张三 ', 61, '2006/11/2 '
union all select '940002 ', '张三 ', 76, '2006/12/10 '
  相关解决方案