sql – 如何在特定列上分组时获取MAX ID?

我有这个表结构和示例数据.在此表中有销售订单的迭代.起初鼠标被要求15个数量.后来买家决定更新数量并将其设为25,然后再次意识到他只需要20个.所以我想从销售订单中获取特定商品的最新行.

CREATE TABLE SaleOrder
(
ID INT PRIMARY KEY,
Item VARCHAR(25),
Qty INT
)

INSERT INTO SaleOrder VALUES (1, 'Mouse', 15);
INSERT INTO SaleOrder VALUES (2, 'Key Board', 10);
INSERT INTO SaleOrder VALUES (3, 'Printer', 3);
INSERT INTO SaleOrder VALUES (4, 'Mouse', 25);
INSERT INTO SaleOrder VALUES (5, 'Mouse', 20);

这是我写的查询.

SELECT ID, Item, Qty
FROM SaleOrder M
WHERE ID = (SELECT MAX(ID) FROM SaleOrder S WHERE S.ID = M.ID GROUP BY Item)

预期的输出应该包含3行.

ID  Item       Qty
1   Mouse      15
2   Key Board  10
3   Printer    3
4   Mouse      25
5   Mouse      20

这里有什么我想念的吗?

最佳答案
您可以尝试使用ROW_NUMBER窗口函数来获取每个项目的最大值

SELECT ID,Item,Qty
FROM (
   SELECT *,ROW_NUMBER() OVER(PARTITION BY Item ORDER BY ID DESC) rn
   FROM SaleOrder
) t1
where rn = 1

SQLfiddle

转载注明原文:sql – 如何在特定列上分组时获取MAX ID? - 代码日志