AI智能
改变未来

rank() over(partition by)示例:oracle取最近更新的记录

比如一个产品的价格表(product_price),记录了产品的所有历史价格,我只想查每个产品最新的价格,怎么办?(下表省略不需要的字段)

productid price updatedate
A1 10.0 2020-01-01
A1 5.0 2020-02-01
A2 20.0 2020-01-01
A3 20.0 2020-01-01
A4 10.0 2020-01-01
A4 15.0 2020-02-01
SELECTproductid,priceFROM(SELECTproductid,price,RANK() OVER(PARTITION BY productid#用产品号分组ORDER BYupdatedate DESC#分组内用更新时间倒序排序) AS nFROMproduct_price)WHEREn = 1#取第一行数据(因为上面用了时间倒序排序,既最新日期)

这样select的输出结果是

productid price
A1 5.0
A2 20.0
A3 20.0
A4 15.0

总结一下就是PARTITION BY后面是你的分组依据字段,相当于MySQL的GROUP BY
ORDER BY后面是你想要的RANK结果的排序字段
请自行举一反三~

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » rank() over(partition by)示例:oracle取最近更新的记录