According to the company rules, a product is sold when it is paid.
The following T-SQL code (shown here very simplified) can be used to update that column:
UPDATE Product SET LastSalesDate = MAX(Orders.PaymentDate) FROM Product INNER JOIN Orders ON (Orders.ProductID = Product.ProductID)
After executing the statement in Sql Server the following error occurs:
Msg 157, Level 15, State 1, Line 2
An aggregate may not appear in the set list of an UPDATE statement.
The error indicates that a column of a table is being updated applying an aggregate function directly.
The solution is to rewrite the query, using for example a sub-query.
Example:
UPDATE Product SET LastSalesDate = LastSaleDates.PaymentDate FROM Product INNER JOIN ( SELECT MAX(Orders.PaymentDate) AS PaymentDate ,Orders.ProductID FROM Orders GROUP BY Orders.ProductID ) LastSaleDates ON (LastSaleDates.ProductID = Product.ProductID)
Another possible solution is to use a Common Table Expression (CTE).
;WITH [LastSaleDates] AS ( SELECT MAX(Orders.PaymentDate) AS PaymentDate ,Orders.ProductID FROM Orders GROUP BY Orders.ProductID ) UPDATE Product SET LastSalesDate = LastSaleDates.PaymentDate FROM Product INNER JOIN LastSaleDates ON (LastSaleDates.ProductID = Product.ProductID)