2013-10-15 19 views
1

在Microsoft Access 2010中,我想运行一个只列出每个客户最近购买的查询。这里是我到目前为止的SQL:选择每个客户的最近一次购买

SELECT ClientNumber, DateOfPurchase 
FROM ordersTable WHERE ClientNumber IN ( 
SELECT MAX(DateOfPurchase) 
FROM ordersTable 
GROUP BY ClientNumber 
); 

的问题是,这个查询没有返回任何数据,尽管OrdersTable中它们是相关数据。我如何修改上面的代码以使其工作?

+0

您的内部查询返回日期列表,然后您的外部查询尝试查找具有匹配这些日期的客户端号码的订单。由于日期和客户端号码永远不匹配,因此外部查询不会返回任何数据。 –

+0

运行内部查询,然后查看'in'应该做什么,这是你的问题;-) @hamza kubba击败了我:P – RobIII

+1

以表格格式添加示例数据和预期的输出也将有助于更好地理解问题 –

回答

1

通常,您可以通过加入表本身解决这个问题:

SELECT o.ClientNumber, o.DateOfPurchase 
FROM ordersTable o JOIN (
    SELECT MAX(DateOfPurchase) as MaxDateOfPurchase, ClientNumber 
    FROM ordersTable 
    GROUP BY ClientNumber 
) t ON o.ClientNumber = t.ClientNumber AND o.DateOfPurchase = t.MaxDateOfPurchase 

随着中说,如果你不选择其他任何领域,子查询将通过自身的工作:

SELECT MAX(DateOfPurchase) as MaxDateOfPurchase, ClientNumber 
FROM ordersTable 
GROUP BY ClientNumber 

编辑,鉴于您使用MS Access,您可能需要关键字AS别名列时。

+0

您的子查询在'SELECT'子句中缺少其'AS'es。 –

+0

@sgeddes在罕见的情况下可能会出现问题,当用户使用相同的DateOfPurchase创建2个订单时 –

+0

通常不需要“AS”,而大多数'RDBMS'用于别名字段或表。这就是说,也许是用'MS Access'(自从我使用那个以来已经有一段时间了!)。 – sgeddes

相关问题