2012-10-30 190 views
0

假設我使用的是像this甲骨文查詢

示範如何將我能夠找到的最後一個客戶訂購一個給產品?
enter image description here

我能走到今天

SELECT customerNumber 
FROM ORDERS 
WHERE orderNumber = (SELECT TOP 1 OrderNumber FROM orderDetails WHERE productCode = 1 
ORDER BY orderDate DESCENDING) 

現在我被困。不確定子查詢應該是什麼。

+0

查找最後一位訂購給定產品的客戶..這意味着您知道產品代碼? – 2012-10-30 19:18:14

+0

該圖和查詢看起來像SQL Server對我來說。你爲什麼用「Oracle11g」標記這個? –

+0

@ Colin'tHart這不是我的實際模型,但它足以讓我獲得我的解決方案。我的實際數據庫是oracle –

回答

1

您應該考慮的方式是僅檢索customerNumber和productCode就足夠了,因爲與這些相關的詳細信息可以通過簡單聯接(或者甚至通過前端代碼中的另一個查詢)檢索到,如果這就是你的前端工作)。

您可以通過orderDate降序對訂單列表進行排序,並抓取第一個訂單。

,那麼你得到:

select customerNumber 
from (
    select o.customerNumber, rownum as r 
    from Orders o, OrderDetails od 
    where o.orderNumber = od.orderNumber 
    and od.productCode = <given_product_code> 
    order by o.orderDate desc 
) 
where r = 1; 

如果你創建一個Orders.orderDate「降」指標,即:

create index orders_orderDate_desc on Orders(orderDate desc); 

那麼查詢甚至會真快,Oracle將使用索引而不是重新排序。

0

需要更多信息,數量加入取決於您要顯示的數據。如果你想要的只是說cumtomer名稱和順序dat,你可以這樣做,(根據需要添加變量)。

 SELECT MAX(o.orderDate) AS lastOrder, c.customerName 
     FROM Orders O, Customers C 
     WHERE o.CustomerNumber = c.CustomerNumber 
     ORDER BY lastOrder