假设我在sql中有一个包含4列(OrderId int,ProductID int,Price money,Size int)的表Orders,其中OrderID和ProductID作为联合主键。
如果我想要查询返回每个产品的最新订单(以及价格和尺寸)(即最大订单ID),有没有办法在没有连接的情况下执行此操作?
我在考虑以下事项:
select o.OrderId, o.ProductId, o.Price, o.Size
from Orders o inner join
(select Max(OrderId) OrderId, ProductId from Orders group by ProductId) recent
on o.OrderId = recent.OrderId and o.ProductId = recent.ProductId
但这似乎不是最优雅的解决方案。
此外,假设包含多个产品的订单会生成多行。它们都必须是主键的一部分。
答案 0 :(得分:2)
不,没有。你有正确的想法。您需要执行子查询以获取max(orderID),productID对,然后将其连接到完整表,以将查询限制为包含最大OrderId的完整表中的行。
答案 1 :(得分:0)
select
MAX(o.OrderId) as NewestOrderID,
o.ProductId,
o.Price,
o.Size
from Orders o
Group by
o.ProductId,
o.Price,
o.Size