oracle 中的 ROW_NUMBER() OVER() 分析函数的用法
ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。
@H_404_6@
- 有数据表省市表T1
字段 类型 空 默认 注释 ID VARCHAR2(32) 否 主键 PROVINCEID VARCHAR2(200) 是 省份ID CITYID VARCHAR2(200) 是 城市ID - 数据如下:
SELECT ID,PROVINCEID,CITYID,ROW_NUMBER() OVER(partition by ID order by CITYID desc) as RANK FROM T1;
ID PROVINCEID CITYID 001 AAA 101 001 AAA 102 002 BBB 101 002 BBB 102 002 BBB 103 - 把上面语句作为一个子表语句,嵌入到另一条语句中:
SELECT ID,CITYID FROM (SELECT ID,ROW_NUMBER() OVER(partition by ID order by CITYID desc) as RANK FROM T1 ) T WHERE T.RANK=1;
ID PROVINCEID CITYID 001 AAA 102 002 BBB 103