oracle 中的 ROW_NUMBER() OVER() 分析函数的用法
ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。
- 有数据表省市表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 |