Fix Error “The function ‘LAST_VALUE’ must have an OVER clause” in SQL Server

If you’re getting SQL Server error 10753 that reads “The function ‘LAST_VALUE’ must have an OVER clause”, it’s probably because you’re calling the LAST_VALUE() function without an OVER clause.

The LAST_VALUE() function requires an OVER clause (and that clause must have an ORDER BY clause).

To fix this issue, include an OVER clause when calling the LAST_VALUE() function.

Example of Error

Here’s an example of code that produces the error:

SELECT
    VendorId,
    ProductName,
    ProductPrice,
    LAST_VALUE( ProductPrice )
FROM Products;

Result:

Msg 10753, Level 15, State 1, Line 5
The function 'LAST_VALUE' must have an OVER clause.

In this case I called the LAST_VALUE() function without an OVER clause, which resulted in an error.

Solution

To fix this issue, add an OVER clause to the LAST_VALUE() function:

SELECT
    VendorId,
    ProductName,
    ProductPrice,
    LAST_VALUE( ProductPrice ) OVER ( 
        ORDER BY ProductPrice
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
        ) AS LAST_VALUE
FROM Products;

Result:

VendorId  ProductName                      ProductPrice  LAST_VALUE
--------  -------------------------------  ------------  ----------
1004      Bottomless Coffee Mugs (4 Pack)  9.99          245       
1003      Hammock                          10            245       
1001      Long Weight (green)              11.99         245       
1004      Tea Pot                          12.45         245       
1001      Long Weight (blue)               14.75         245       
1001      Left handed screwdriver          25.99         245       
1001      Right handed screwdriver         25.99         245       
1002      Sledge Hammer                    33.49         245       
1003      Straw Dog Box                    55.99         245       
1003      Chainsaw                         245           245       

No more error.

It’s also important to remember that the OVER clause must have an ORDER BY clause. Omitting this will cause another error.

Also, in this example I used ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING in my OVER clause to ensure that the window frame extended to the last row of the query result set.