Sql 如何在对特定列进行分组时获取最大ID?
我有这个表结构和样本数据。此表中有销售订单的迭代。第一次请求鼠标移动15个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, '
数量
。后来,买家决定更新数量
,将其设为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