OVER(PARTITION BY)函数的简单理解

最近做项目遇到的问题,想要取表中同一个人的最新记录,使用了OVER(PARTITION BY)函数,SQL如下

SELECT T.*,
ROW_NUMBER() OVER(PARTITION BY T.证件号 ORDER BY T.数据产生日期 DESC) RN 
FROM PER_PROREG_INFO T

可以理解为给表中的数据加了一列“RN”,作为标记数据的序号,按同一证件号的数据产生日期进行排序,结果如图

想要取每个人的最新记录,在SQL外层筛选RN=1的数据即可

注:SQL中的ROW_NUMBER()可以换成RANK()和DENSE_RANK()

RANK:有并列数据(如成绩)并且跳跃排序(如有两个并列第一时,第三条数据的RN=3)

DENSE_RANK:有并列数据(如成绩)并且不跳跃排序(如有两个并列第一时,第三条数据的RN=2)

 

你可能感兴趣的:(OVER(PARTITION BY)函数的简单理解)