比如一个产品的价格表(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结果的排序字段
请自行举一反三~