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は再度ソートする代わりにインデックスを使用するため、クエリは非常に高速になります。