日期:2014-05-17  浏览次数:20416 次

求一条SQL啊。本人写不出来。谢谢。
选课表 userid,classid
         1        1
         1        2
         1        3
         2        2
         2        6
 

用户1选了三门课程 用户2选了两门课程



课程表 classid,classname
       1        语文
       2        数学
       3        英语
       4        物理
       5        化学
       6        体育
     



考试成绩表    userid,classid,score,addtime
               1      1       95    20130301
               1      1       90    20130301
               1      3       92    20130304
               1      2       78    20130209




现在想查任意一个学生的考试结果。给定任意一个USERID,需要的结果集如下:

语文 95 20130301
英语 92 20130304
数学 78 20130209

每门课程只要最新的一个考试结果。

所有课程的考试成绩需要按考试时间倒序排列。这个SQL该怎么写呢?谢谢大家。



------解决方案--------------------

select classname,score,addtime from 选课表 a join 课程表 b on a.classid=b.classid join 
(select userid,classid,score=max(score),addtime=max(addtime) from 考试成绩表 k1 where not exists(select 1 from 考试成绩表 k2 where k1.userid=k2.userid and 
k1.classid=k2.classid and k1.addtime<k2.addtime) group by userid,classid) c on a.userid=c.userid and a.classid=c.classid 


------解决方案--------------------
create table 选课表(userid int,classid int)
create table 课程表(classid int,classname varchar(10))
create table 考试成绩表(userid int,classid int,score float,addtime datetime)
go
insert 选课表
select 1,1 union all
select 1,2 union all
select 1,3 union all
select 2,2 union all
select 2,6

insert 课程表 values(1,'语文')
insert 课程表 values(2,'数学')
insert 课程表&