A frame says which rows around the current one a window function uses. Add it after the ORDER BY inside OVER:
AVG(total) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
That's a three-row moving average: this row and the two before it. UNBOUNDED PRECEDING means from the first row, n FOLLOWING looks ahead, and UNBOUNDED FOLLOWING reaches the last row.
When you write ORDER BY with no frame, the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: a running total that includes every row tied with the current one. ROWS counts physical rows instead. That default explains a classic surprise: LAST_VALUE(x) OVER (ORDER BY d) returns the current row, because the frame ends at the current row. Give it ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING, or use FIRST_VALUE with the order reversed.
The first rows of a moving window have fewer rows behind them. Decide whether those partial averages should show or be left NULL.