У меня есть таблица истории, содержащая снимок каждого изменения записи.Я пытаюсь вернуть определенную строку истории с первоначальной записанной датой.В настоящее время я использую это:
select
s.Description,
h.CaptureDate OriginalCaptureDate
from
HistoryStock s
left join
( select
StockId,
CaptureDate
from
HistoryStock
where
HistoryStockId in ( select MIN(HistoryStockId) from HistoryStock group by StockId )
) h on s.StockId = h.StockId
where
s.HistoryStockId = @HistoryStockId
Это работает, но с 1 миллионами записей на медленной стороне, и я не уверен, как оптимизировать этот запрос.
Как можноэтот запрос должен быть оптимизирован?
ОБНОВЛЕНИЕ :
WITH OriginalStock (StockId, HistoryStockId)
AS (
SELECT StockId, min(HistoryStockId)
from HistoryStock group by StockId
),
OriginalCaptureDate (StockId, OriginalCaptureDate)
As (
SELECT h.StockId, h.CaptureDate
from HistoryStock h join OriginalStock o on h.HistoryStockId = o.HistoryStockId
)
select
s.Description,
h.OriginalCaptureDate
from
HistoryStock s left join OriginalCaptureDate h on s.StockId = h.StockId
where
s.HistoryStockId = @HistoryStockId
Я обновил код для использования CTE, но мне не повезло в производительности, только малувеличение производительности.Есть идеи?
Еще одно замечание, мне нужно перейти к первой записи в таблице истории для StockId, а не к самой ранней дате захвата.