SQL Server 利用 Rank() 函数获取每个分组中的第一行记录

wangqingjie · 2017年06月30日 · 75 次阅读

在有些情况下我们需要对数据分组并且获取每个分组中的第一条记录,这时候我们可以采用 Rank() 函数来获取。
我们创建一个表作为测试表

CREATE   TABLE   table1(a   VARCHAR(10),b   VARCHAR(10),c   VARCHAR(10))
--插入数据  

INSERT   INTO table1 VALUES('2004','12','storea');
INSERT   INTO   table1 VALUES('2005','07','storea');  
INSERT   INTO   table1 VALUES('2004','11','storeb');
INSERT   INTO   table1 VALUES('2005','06','storeb');
--调用Rank函数

SELECT * FROM (SELECT t.*, RANK() 
        OVER (PARTITION BY t.a ORDER BY t.b DESC) AS drank
FROM table1 t) a WHERE drank=1

真是好贴

这是窗口函数的范畴,大家可以多学习下,很有用处哦

补充一下,类似的排序函数有这三个:
ROW_NUMBER():没有重复值的排序(即使两条记录相同,序号也不重复的),不会有同名次。
DENSE_RANK():连续的排序,会出现两个第二名但后面仍然跟着第三名。
RANK():跳跃排序,会出现两个第二名接下来就是第四名,(没有第三名),用于成绩排名。

一张图看懂这三个函数 20160714002415359

好帖子啊

好帖子啊

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册