假设我使用的是this
这样的模型我如何才能找到最后一位订购产品的客户?
我到目前为止
SELECT customerNumber
FROM ORDERS
WHERE orderNumber = (SELECT TOP 1 OrderNumber FROM orderDetails WHERE productCode = 1
ORDER BY orderDate DESCENDING)
现在我被卡住了。不确定应该是什么子查询。
答案 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