有如下表格:
学号 姓名 成绩 日期
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 '