日期:2014-05-17  浏览次数:20434 次

(最新)一个简单的SQL语句求大神给力。
表user ID为自动增长 gradetypeid 表示几年级
select id,name,gradetypeid,brownum,age,meteid,[date] from users
结果
1 张三 1 11 12 1 2012-10-11
2 张四 2 16 11 9 2012-09-10
3 张五 2 17 7 8 2012-09-01
4 张六 3 16 9 10 2012-08-07
5 张七 3 18 7 4 2012-09-10
6 张八 2 19 9 7 2012-07-06
7 张九 2 21 16 8 2012-05-04
8 张十 3 41 19 12 2012-06-09
9 李一 1 71 7 6 2012-03-01
11 李二 3 99 19 11 2012-09-11 
13 李四 1 88 10 5 2012-01-08
14 王五 2 54 15 7 2012-06-05
15 王六 3 33 16 15 2012-02-03
16 王七 3 44 17 16 2012-09-10
18 王九 3 56 19 19 2012-03-09
19 关一 3 34 20 21 2012-06-07
表grade id为自动增长
select id, gradename,gradeid,gradetypeid,gradetypename,meteid,stype from [grade]
结果
1 一年级 1 1 小学 1 1
3 三年级 3 2 初中 9 2
4 二年级 5 2 初中 8 3
5 一年级 1 3 高中 10 3
6 二年级 2 3 高中 4 2 
7 一年级 1 2 初中 7 3
9 二年级 2 2 初中 8 1 
10 三年级 3 3 高中 12 2
11 六年级 6 1 小学 6 3
12 二年级 2 3 高中 11 1
13 五年级 5 1 小学 5 2
15 一年级 1 2 初中 7 3
16 一年级 1 3 高中 15 1
18 二年级 2 3 高中 16 2
19 三年级 3 3 高中 19 3
20 一年级 1 3 高中 21 1
我想得到的结果是 高中 一年级 ,二年级,三年级 brownum最大的前两名同学,若同年级stype相同则过滤查下一条数据
id name gradename gradetypename age stype
19 关一 一年级 高中 20 1
13 李四 一年级 高中 10 3
11 李二 二年级 高中 19 1
16 王七 二年级 高中 17 2
18 王九 三年级 高中 19 3
8 张十 三年级 高中 19 2 

这里的 高中一年级李四 brownum没有高中一年级的王六 brownum大 但 王六与关一的stype是相同的 所以舍去王六。

------解决方案--------------------
select top 2 id, gradename, brownum from table groupby gradename orderby brownum desc
------解决方案--------------------
partition by 加row_number()