oracle查询

时间:2012-10-30 19:09:02

标签: sql oracle11g

假设我使用的是this

这样的模型

我如何才能找到最后一位订购产品的客户?
enter image description here

我到目前为止

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

现在我被卡住了。不确定应该是什么子查询。

2 个答案:

答案 0 :(得分: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将使用索引而不是再次排序。

答案 1 :(得分:0)

需要更多信息,数字连接取决于您想要显示的数据。如果你想要的只是说明产者名称和订单数据,你可以这样做,(根据需要添加变量)。

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