У меня есть вопрос, связанный с T-SQL и SQL Server.
Скажем, у меня есть таблица заказов с двумя столбцами:
- ProductId int
- CustomerId int
- Дата datetime
Я хочу дату первого заказа для каждого продукта, поэтому я выполняю этот тип запроса:
SELECT ProductId, MIN(Date) AS FirstOrder
FROM Orders
GROUP BY ProductId
У меня есть индекс на ProductId
, включая столбцы CustomerId
и Date
, чтобы ускорить запрос (IX_Orders
). План запроса выглядит как некластеризованное сканирование индексов на IX_Orders
, за которым следует агрегат потока (без учета индекса).
Теперь моя проблема в том, что я также хочу получить CustomerId
, связанный с первым порядком для каждого продукта (продукт 26 был сначала заказан во вторник 25, заказчиком 12). Сложная часть состоит в том, что я не хочу, чтобы внутри плана выполнения не было внутреннего цикла, потому что это означало бы дополнительное чтение в ProductId
в таблице, что крайне неэффективно.
Это должно быть возможно с использованием того же некластеризованного сканирования индекса, за которым следуют агрегаты потоков, однако я не могу найти запрос, который бы это сделал. Любая идея?
Спасибо