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);
 
     
     
     
    