比如一个产品的价格表(product_price),记录了产品的所有历史价格,我只想查每个产品最新的价格,怎么办?(下表省略不需要的字段)
productidpriceupdatedate
A110.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的输出结果是
productidprice
A15.0A220.0A320.0A415.0
总结一下就是PARTITION BY后面是你的分组依据字段,相当于MySQL的GROUP BY ORDER BY后面是你想要的RANK结果的排序字段 请自行举一反三~