获取按ID分组的最新条目

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)

由于查询很慢并且应该保持连接到另一个查询,我真的想要一些关于如何做得更好的输入.

还有另外一种方法吗?

Vam*_*ala 5

使用分析函数.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)