sql - 获取按 ID 分组的最新条目

标签 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

因此,我需要获取每个产品的最新库存更新并返回:

ProductID | Quantity
1           444
2           222     

以下 SQL 有效,但速度很慢。

SELECT ProductID, Quantity
FROM (
    SELECT ProductID, Quantity
    FROM Stock
    WHERE LastUpdate 
    IN (SELECT MAX(LastUpdate) FROM Stock GROUP BY ProductID)
) 

由于查询速度很慢并且应该与另一个查询结合,我真的很想知道如何更好地完成这项工作。

还有别的办法吗?

最佳答案

使用解析函数。 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

或用first_value .

SELECT DISTINCT ProductID, FIRST_VALUE(Quantity) OVER(partition by ProductID order by LstUpdte desc) as quantuity
FROM Stock

关于sql - 获取按 ID 分组的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54208733/

相关文章:

MySQL MAX 函数用于不使用 GROUP BY 子句的类别

python - 元组列表列表中的最大值

mysql - SQL如何删除特定列的重复行并保留一个

php - 如何使用数据库中的数组选择mysql

mysql - 建议合适的mysql日期函数

sql-server - 多行文件的 SSIS 表达式生成器(执行进程任务)

sql-server - ROW_NUMBER() 与 DISTINCT

sql - 限制从 Oracle 中的 SQL 查询返回的记录

sql-server - 使用powershell时如何在完成时关闭sql server连接?

c++ - 改进我对最大子数组问题的分而治之形式的实现