row_number() over()用法理解

select row_number() over(partition by A order by B ) rn from table

A :为分组字段

B:为分组后的排序字段。

table 表的结构 多为:  多人 多条相关数据。

此条sql 语句 多用于 分组排序后 求出  排序后的 前一条 或者 前几条数据,要么 单独 直接 返回结果集,要么 和 其他表连接 继续查询。


举个例子  table   是 人的学历表   每个人 都有多条学历记录。

RY_ID (人员id)                XL    (里面存放的是学历的 代码值)         

  1                                              01

  1                                              02

  2                                              02

  2                                              03


这个时候 如果想 求出 每个人的  xl  代码 最高的 信息   (也就是 最高的学历)


select * from (select row_number() over(partition by RY_ID order by XL desc) rn from table) tn where tn.rn=1

这样就可以 先 按照  人员id  分组 ,分组完后 按照学历 倒叙  排出 序号  然后 取 序号是 第一个的就行

你可能感兴趣的:(sql)