Our database is SQL Server 2014. I'll simplify my example to explain my problem.
TableA
has columns:
CustomerID (primary key), LatestOrderedItem, LatestOrderDate
TableB
has columns:
OrderID, CustomerID, OrderedItem, PurchaseDate
I want to update the LatestOrderedItem
and LatestOrderDate
of TableA
with the latest/most recent order of a customer from TableB
(based on purchase date).
What's the best / most efficient update statement for this? (In actuality, both tables have millions of records in our situation.)
Approaches I tried but are still very slow:
Approach 1:
UPDATE a
SET LatestOrderedItem = (SELECT TOP 1
OrderedItem
FROM TableB
WHERE CustomerID = a.CustomerID
ORDER BY PurchaseDate DESC),
LatestOrderDate = (SELECT TOP 1
PurchaseDate
FROM TableB
WHERE CustomerID = a.CustomerID
ORDER BY PurchaseDate DESC)
FROM TableA a;
Approach 2:
UPDATE a
SET LatestOrderedItem = b.OrderedItem,
LatestOrderDate = b.PurchaseDate
FROM TableA a
INNER JOIN TableB b ON a.CustomerID = b.CustomerID
WHERE NOT EXISTS (SELECT 1
FROM TableB b2
WHERE b2.CustomerID = b.CustomerID
AND b2.PurchaseDate > b.PurchaseDate);