例如:
     select * from Student_score_info 得出
张三   第一学期   90分
李四   第一学期   80分
张三   第二学期   88分
王五   第二学期   70分
我想查出每个学生最新的成绩、也就是除了张三第一学期的成绩不要!其他3个数据都要保留!SQL怎么写?

解决方案 »

  1.   

    --> 测试数据: #tb
    if object_id('tempdb.dbo.#tb') is not null drop table #tb
    go 
    create table #tb (name varchar(4),sj varchar(8),score varchar(4))
    insert into #tb
    select '张三','第一学期','90分' union all
    select '李四','第一学期','80分' union all
    select '张三','第二学期','88分' union all
    select '王五','第二学期','70分'select * from #tb t
    where not exists(select 1 from #tb where name=t.name and sj<t.sj)name sj       score
    ---- -------- -----
    李四   第一学期     80分
    张三   第二学期     88分
    王五   第二学期     70分(3 行受影响)
      

  2.   


    select a.姓名,(select top 1 b.学期 from Student_score_info where a.姓名=b.姓名 order by 学期 desc) [学期],a.分数
    from Student_score_info  as a 这样?   学期这样排序应该也是可以的。表设计的不是很合理,其实学期列记录1,2(分别表示第一、第二学期)就可以了,其他都是常量。
      

  3.   

    select a.姓名,(select top 1 b.学期 from Student_score_info where a.姓名=b.姓名 order by 学期 desc) [学期],a.分数
    from Student_score_info  as a 楼上的没错