关于group by 多列显示,着急,请教!!!
有这样一个表格:
姓名 成绩 考试时间
王刚 76 2006-10-10
王刚 66 2006-7-13
王刚 81 2006-4-20
王刚 86 2007-1-10
张平 80 2006-9-12
张平 68 2006-5-23
张平 88 2007-2-1
张平 77 2006-12-2
想要找到每个学生的“最好成绩”,同时显示“学生姓名”和“考试时间”。
上面的例子,查询结果应该是:
王刚 86 2007-1-10
张平 88 2007-2-1
最好的成绩容易得出:
select 姓名, max(成绩) from 成绩表 group by 姓名
但是如何同时显示“考试时间”呢??
[解决办法]
Select * from 成绩表 as t where not exists
(Select * from 成绩表 where 姓名=t.姓名 and 成绩> t.成绩)
[解决办法]
select * from T as tmp
where not exists(select 1 from T where 姓名=tmp.姓名 and 成绩> tmp.成绩)
[解决办法]
create table #tab
(
姓名 varchar(10),成绩 int,时间 datetime
)
--select *
--from #tab
insert into #tab (姓名,成绩,时间)
select '王刚 ',76, '2006-10-10 '
union
select '王刚 ',66, '2006-7-13 '
union
select '王刚 ',81, '2006-4-20 '
union
select '王刚 ', 86 , '2007-1-10 '
union
select '张平 ' , 80 , '2006-9-12 '
union
select '张平 ' , 68 , '2006-5-23 '
union
select '张平 ' , 88 , '2007-2-1 '
union
select '张平 ', 77, '2006-12-2 '
--truncate table #tab
select * from #tab as tmp
where not exists(select 1 from #tab where 姓名=tmp.姓名 and 成绩> tmp.成绩)
================
姓名 成绩 时间
---------- ----------- ------------------------------------------------------
王刚 86 2007-01-10 00:00:00.000
张平 88 2007-02-01 00:00:00.000
(所影响的行数为 2 行)