2013-10-15 38 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

相關問題