【发布时间】:2010-09-24 18:53:00
【问题描述】:
假设我有 2 个表:客户和订单。一个客户可以有多个订单。
现在,我需要向所有客户展示他的最新订单。这意味着如果客户有多个订单,则仅显示最晚进入时间的订单。
这是我独自完成的:
SELECT a.*, b.Id
FROM Customer a INNER JOIN Order b ON b.CustomerID = a.Id
ORDER BY b.EntryTime DESC
这当然会返回具有一个或多个订单的所有客户,首先显示每个客户的最新订单,这不是我想要的。在这一点上,我的思想陷入了困境,所以我希望有人能指出我正确的方向。
出于某种原因,我认为我需要在某处使用 MAX 语法,但它现在只是逃避了我。
更新:在这里查看了几个答案(有很多!)后,我意识到我犯了一个错误:我的意思是 任何 客户的最新记录。这意味着如果他没有订单,那么我不需要列出他。
UPDATE2: 修正了我自己的 SQL 语句,这可能给其他人造成了无穷无尽的困惑。
【问题讨论】:
-
本例中您的客户表有一个 OrderId。对吗?
-
如果您的 Customer 表有一个 OrderID,那么您的问题没有意义。如果这是真的,您会说每个订单都有不同的客户。您确定您的 Order 表没有 CustomerID?
-
@Martin:哎呀,你说得对!伙计,我今天真的疯了。 ://
标签: sql sql-server-2005