Если я включу этот подзапрос, который выбирает продавцов и их наибольшую цену, уплаченную за любой предмет, который они продают:
select *,
(select top 1 highestProductPrice
from orders o
where o.salespersonid = s.id
order by highestProductPrice desc ) as highestProductPrice
from salespersons s
в это объединение для повышения эффективности:
select *, highestProductPrice
from salespersons s join (
select salespersonid, highestProductPrice, row_number(
partition by salespersonid
order by salespersonid, highestProductPrice) as rank
from orders ) o on s.id = o.salespersonid
Он по-прежнему затрагивает каждую запись заказа (по-видимому, перечисляет всю таблицу перед фильтрацией по salespersonid.) Однако вы не можете сделать это:
select *, highestProductPrice
from salespersons s join (
select salespersonid, highestProductPrice, row_number(
partition by salespersonid
order by salespersonid, highestProductPrice) as rank
from orders
where orders.salepersonid = s.id) o on s.id = o.salespersonid
Предложение where в соединении вызывает `multi-partидентификатор "s.id" не может быть привязан.
Можно ли каким-либо образом объединить первые 1 из каждой группы заказов с помощью объединения, но не затрагивая каждую запись в заказах?