日期:2014-05-18  浏览次数:20508 次

如何得到分组后的主键ID
有表如下成绩表,得到每个人最高成绩排名,并且知道对象的主键ID
主键ID 用户名 成绩 日期
1 张三 500 2012-01-01
2 张三 400 2012-01-02
3 李四 100 2012-01-04
4 李四 200 2012-01-05
查每个人最高成绩排名SQL为
SQL code

  
SELECT Row_Number OVER (ORDER BY 成绩 DESC) AS Num , 用户名
FROM 成绩表
GROUP BY 用户名



但是无法知道最高成绩的主键ID是什么

------解决方案--------------------
SQL code

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([主键ID] int,[用户名] varchar(4),[成绩] int,[日期] datetime)
insert [test]
select 1,'张三',500,'2012-01-01' union all
select 2,'张三',400,'2012-01-02' union all
select 3,'李四',100,'2012-01-04' union all
select 4,'李四',200,'2012-01-05'

select * from [test] a
where a.成绩=(select max(成绩) from [test] b where a.用户名=b.用户名)

/*
主键ID    用户名    成绩    日期
-------------------------------------------------
1    张三    500    2012-01-01 00:00:00.000
4    李四    200    2012-01-05 00:00:00.000
*/

------解决方案--------------------
探讨

你上面的语句太简单了 我还以为可以这么简单的语句实现,让我高兴了一把,结果发现意义完全 变了
你的SQL 是用户自己成绩与自己的排名 ,不是自己的最高成绩与别人的总排名