0

のような2つのテーブルがCustomersありOrders、テーブルCustomersには列idがあり、nameテーブルOrdersには列がidあります。customer_idorder_date

id次に、各顧客nameと最後のを返す1つの選択を行う必要がありますorder_date

私はこのように作ろうとしました:

select
    Customers.id,
    Customers.name,
    (select Orders.order_date from Orders where Orders.customer_id = Customer.id order by order_date desc) as last_order_date
from
    Customers

しかし、それは間違ったインデックスを取得し、実行するのに永遠にかかります。PostgreSQLでこれを選択するための最良の方法は何ですか?

よろしくお願いします。

4

1 に答える 1

2

で制限しない場合customer_id、クエリは注文テーブル全体をスキャンする必要があります。

SELECT c.id
      ,c.name
      ,MAX(o.order_date) AS last_order_date
FROM Customers c
LEFT OUTER JOIN Orders o ON (o.customer_id = c.id)
GROUP BY c.id, c.name
于 2013-01-12T14:32:52.920 に答える