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

    技术2023-08-11  125

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

    productidpriceupdatedateA110.02020-01-01A15.02020-02-01A220.02020-01-01A320.02020-01-01A410.02020-01-01A415.02020-02-01 SELECT productid, price FROM ( SELECT productid, price, RANK() OVER( PARTITION BY productid#用产品号分组 ORDER BY updatedate DESC#分组内用更新时间倒序排序 ) AS n FROM product_price ) WHERE n = 1#取第一行数据(因为上面用了时间倒序排序,既最新日期)

    这样select的输出结果是

    productidpriceA15.0A220.0A320.0A415.0

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

    Processed: 0.023, SQL: 9