Sql 如何在对特定列进行分组时获取最大ID?

Sql 如何在对特定列进行分组时获取最大ID?,sql,sql-server,Sql,Sql Server,我有这个表结构和样本数据。此表中有销售订单的迭代。第一次请求鼠标移动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, '

我有这个表结构和样本数据。此表中有销售订单的迭代。第一次请求鼠标移动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

这里有我遗漏的东西吗?

您可以尝试使用
行数
窗口功能,以每个
项目获得最大值

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

您可以使用以下任一方法:

使用
行号()

使用子查询

SELECT
    *
    FROM SaleOrder SO
        WHERE ID = (
            SELECT MAX(ID) FROM SaleOrder WHERE Item = SO.Item
        )-- You Don't Need the Group By Here
结果

ID          Item                      Qty
----------- ------------------------- -----------
3           Printer                   3
5           Mouse                     20
2           Key Board                 10

您可以使用
MAX
尝试以下查询

SELECT SaleOrder.* FROM (
SELECT MAX(Id) as Id, Item FROM SaleOrder Group By Item
)a INNER JOIN SaleOrder ON a.Id = SaleOrder.Id
或者,您也可以使用以下命令

SELECT *
FROM SaleOrder D
WHERE Id = (SELECT MAX(Id) FROM SaleOrder WHERE Item = D.Item)
两种情况下的输出如下所示

ID  Item        Qty
--------------------
3   Printer      3
5   Mouse       20
2   Key Board   10
你可以在这里看到演示-

ID  Item        Qty
--------------------
3   Printer      3
5   Mouse       20
2   Key Board   10