ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) --(其中,COL1,COL2能够为多列)
select xt.id,
xt.item,
xt.attribute1,
xt.attribute2,
ROW_NUMBER() OVER(PARTITION BY xt.id,xt.item order by xt.id,xt.item) test
from xxuts_test xtspa
表示根据COL1分组,在分组内部根据 COL2排序
而这个值就表示每组内部排序后的顺序编号(组内连续的惟一的)blog
RANK() 相似,不过RANK 排序的时候跟派名次同样,能够并列2个第一名以后 是第3名排序
LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL文档
BTW: EXPERT ONE ON ONE 上讲的最详细,还有不少相关特性,文档看起来比较费劲get
row_number()和rownum差很少,功能更强一点(能够在各个分组内从1开时排序)
rank()是跳跃排序,有两个第二名时接下来就是第四名(一样是在各个分组内)
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
相比之下row_number是没有重复值的
lag(arg1,arg2,arg3):
arg1是从其余行返回的表达式
arg2是但愿检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索之前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。it
row_number() over ([partition by col1] order by col2) ) as 别名
表示根据col1分组,在分组内部根据 col2排序
而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的惟一的),[partition by col1] 可省略。io