0

假设我正在使用这样的模型

我如何才能找到最后一个订购给定产品的客户?
在此处输入图像描述

我走到这一步

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

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

4

2 回答 2

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 将使用索引而不是再次排序。

于 2012-10-30T19:19:36.837 回答
0

需要更多信息,连接数取决于您要显示的数据。如果您只想说出客户名称和订单 dat,您可以这样实现(根据需要添加变量)。

        SELECT MAX(o.orderDate) AS lastOrder, c.customerName
        FROM Orders O, Customers C
        WHERE o.CustomerNumber = c.CustomerNumber
        ORDER BY lastOrder
于 2012-10-30T19:19:47.663 回答