Onk*_*aps 2 sql sql-server max
我有一张产品库存表.问题是每次库存变更时,新值都会与新数量一起存储.例:
ProductID | Quantity | LastUpdate
1 123 2019.01.01
2 234 2019.01.01
1 444 2019.01.02
2 222 2019.01.02
Run Code Online (Sandbox Code Playgroud)
因此,我需要获取每个产品的最新库存更新并返回:
ProductID | Quantity
1 444
2 222
Run Code Online (Sandbox Code Playgroud)
以下SQL工作,但速度很慢.
SELECT ProductID, Quantity
FROM (
SELECT ProductID, Quantity
FROM Stock
WHERE LastUpdate
IN (SELECT MAX(LastUpdate) FROM Stock GROUP BY ProductID)
)
Run Code Online (Sandbox Code Playgroud)
由于查询很慢并且应该保持连接到另一个查询,我真的想要一些关于如何做得更好的输入.
还有另外一种方法吗?
使用分析函数.row_number可以在这种情况下使用.
SELECT ProductID, Quantity
FROM (SELECT ProductID, Quantity, row_number() over(partition by ProductID order by LstUpdte desc) as rnum
FROM Stock
) s
WHERE RNUM = 1
Run Code Online (Sandbox Code Playgroud)
或者first_value.
SELECT DISTINCT ProductID, FIRST_VALUE(Quantity) OVER(partition by ProductID order by LstUpdte desc) as quantuity
FROM Stock
Run Code Online (Sandbox Code Playgroud)