假设我正在使用这样的模型
我如何才能找到最后一个订购给定产品的客户?
我走到这一步
SELECT customerNumber
FROM ORDERS
WHERE orderNumber = (SELECT TOP 1 OrderNumber FROM orderDetails WHERE productCode = 1
ORDER BY orderDate DESCENDING)
现在我被困住了。不确定应该是什么子查询。
您应该想到的方式是,仅检索 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 将使用索引而不是再次排序。
需要更多信息,连接数取决于您要显示的数据。如果您只想说出客户名称和订单 dat,您可以这样实现(根据需要添加变量)。
SELECT MAX(o.orderDate) AS lastOrder, c.customerName
FROM Orders O, Customers C
WHERE o.CustomerNumber = c.CustomerNumber
ORDER BY lastOrder