有一个表如下:姓名     科目      月      成绩
张三     语文      01        95
张三     数学      01        62
张三     英语      01        83
张三     语文      02        64
张三     数学      02        75
张三     英语      02        66
张三     语文      03        100
张三     数学      03        75
张三     英语      03        83
李四     语文      01        84
李四     数学      01        92
李四     英语      01        70
李四     语文      02        85
李四     数学      02        75
李四     英语      02        64
王五     语文      01        85
王五     数学      01        62
王五     英语      01        85现在想取每个人最大月的所有科目的成绩,也就是最近一次成绩,注意,每个人的科目也不一定一样,而且每个人的最大月也不一样,要的结果如下:姓名     科目      月      成绩
张三     语文      03        100
张三     数学      03        75
张三     英语      03        83
李四     语文      02        85
李四     数学      02        75
李四     英语      02        64
王五     语文      01        85
王五     数学      01        62
王五     英语      01        85请问该怎么写SQL?

解决方案 »

  1.   

    本帖最后由 josy 于 2011-05-15 18:02:19 编辑
      

  2.   

    select * from tablename a
    where not exists ( select 1 from tablename where 姓名= a.姓名 and 月 > a.月)
      

  3.   

    declare @table table (姓名 varchar(4),科目 varchar(4),月 varchar(2),成绩 int)
    insert into @table
    select '张三','语文','01',95 union all
    select '张三','数学','01',62 union all
    select '张三','英语','01',83 union all
    select '张三','语文','02',64 union all
    select '张三','数学','02',75 union all
    select '张三','英语','02',66 union all
    select '张三','语文','03',100 union all
    select '张三','数学','03',75 union all
    select '张三','英语','03',83 union all
    select '李四','语文','01',84 union all
    select '李四','数学','01',92 union all
    select '李四','英语','01',70 union all
    select '李四','语文','02',85 union all
    select '李四','数学','02',75 union all
    select '李四','英语','02',64 union all
    select '王五','语文','01',85 union all
    select '王五','数学','01',62 union all
    select '王五','英语','01',85select a.* from @table a left join 
    (select 姓名,max(月) as 月 from @table group by 姓名) b
    on a.姓名=b.姓名 and a.月=b.月
    where b.姓名 is not null order by a.月 desc/*
    姓名   科目   月    成绩
    ---- ---- ---- -----------
    张三   语文   03   100
    张三   数学   03   75
    张三   英语   03   83
    李四   语文   02   85
    李四   数学   02   75
    李四   英语   02   64
    王五   语文   01   85
    王五   数学   01   62
    王五   英语   01   85
    */