排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。
ODER BY 指定排名开窗函数的顺序。在排名开窗函数中必须使用ORDER BY语句
http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html
rank 跳过排名 dense_rank 继续排名
create table tb_test(name varchar(10),val int,memo varchar(20)) insert into tb_test values('a', 2, 'a2(a的第二个值)') insert into tb_test values('a', 1, 'a1--a的第一个值') insert into tb_test values('a', 3, 'a3:a的第三个值') insert into tb_test values('b', 1, 'b1--b的第一个值') insert into tb_test values('b', 3, 'b3:b的第三个值') insert into tb_test values('b', 2, 'b2b2b2b2') insert into tb_test values('b', 4, 'b4b4') insert into tb_test values('b', 5, 'b5b5b5b5b5') insert into tb_test values('b', 5, 'bb5') go --方案1 select a.* from tb_test a where not exists(select 1 from tb_test where name = a.name and val > a.val) ; select a.* from tb_test a,(select name,max(val) val from tb_test group by name) b where a.name = b.name and a.val = b.val order by a.name; select a.* from tb_test a inner join (select name , max(val) val from tb_test group by name) b on a.name = b.name and a.val = b.val order by a.name --方案2 分组后 取每组前 2条数据 select * from ( SELECT ROW_NUMBER() over (PARTITION By name order by val) as rowId,tb_test.* FROM tb_test ) t where rowid <= 2