【发布时间】:2010-10-01 03:50:01
【问题描述】:
假设我在 sql 中有一个包含 4 列(OrderId int、ProductID int、Price money、Size int)的表 Orders,其中 OrderID 和 ProductID 作为联合主键。
如果我希望查询返回每个产品的最新订单(以及价格和尺寸)(即最大 OrderId),有没有办法在没有连接的情况下做到这一点?
我在想以下几点:
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
但这似乎不是最优雅的解决方案。
此外,假设包含多个产品的订单会生成多行。它们都必须是主键的一部分。
【问题讨论】:
-
你为什么要摆脱连接?关系数据库针对连接进行了优化(关系理论),因此删除它们可能会影响性能。
-
如果您关心下订单的时间和/或日期,您应该考虑添加一个日期列。然后您可以按该列排序。
-
即使有一个日期列并且您基于此订购,这也无法帮助您找到每种产品类型的最新订单,因为您可以让最近的几个订单相同产品类型。
标签: sql