Вы также можете перейти к следующему.
Select Temp.orderid, T.AccountId, T.DateCreated
From
(
Select AccountId, max(DateCreated) as DateCreated
From [Order]
Group By AccountId
)T
Inner Join [Order] Temp on Temp.AccountId = T.AccountId
AND Temp.DateCreated = T.DateCreated
CTE не является таблицей UDT / temp;думайте о CTE как о представлении, которое определено только для вашего текущего запроса.Как и представление, CTE расширяется и складывается в общий план запросов.Глобальная оптимизация все еще будет происходить, но не думайте, что только потому, что вы используете CTE, вы будете выполнять запрос только один раз.Вот тривиальный пример, который вписывается в это пространство: WITH vw AS (SELECT COUNT (*) c FROM Person) SELECT ac, bc FROM vw a, vw b;План запроса будет четко показывать два сканирования / агрегации и объединение вместо того, чтобы просто проецировать один и тот же результат дважды.