Вам понадобится OUTER APPLY
здесь.
Ваше предложение WHERE
выглядит неправильно.Я предполагаю, что OrderDate
является уникальным из-за того, что может определить «предыдущую» строку.
SELECT o.OrderId,
o.OrderDate,
o.OrderAmount,
po.OrderAmount
FROM [Order] o
OUTER APPLY(SELECT TOP(1) so.OrderAmount
FROM [Order] so
WHERE so.CustomerId = o.CustomerId
AND so.OrderDate < o.OrderDate
ORDER BY so.OrderDate DESC) po
Но вам, возможно, будет лучше, если вы присоединитесь к ROW_NUMBER
;WITH Ord
AS (SELECT OrderId,
OrderDate,
OrderAmount,
CustomerId,
ROW_NUMBER() OVER ( PARTITION BY CustomerId
ORDER BY OrderDate) AS RN
FROM [Order])
SELECT o.OrderId,
o.OrderDate,
o.OrderAmount,
po.OrderAmount
FROM Ord o
LEFT JOIN Ord po
ON o.CustomerId = po.CustomerId
AND o.RN = po.RN + 1