有一个表如下:姓名 科目 月 成绩
张三 语文 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?
张三 语文 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?
where not exists ( select 1 from tablename where 姓名= a.姓名 and 月 > a.月)
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
*/