Put an aggregate like SUM in front of OVER (ORDER BY ...) and it becomes a running total: each row adds its value to everything before it.
SELECT order_date, total,
SUM(total) OVER (ORDER BY order_date) AS running_total
FROM orders;
Add PARTITION BY to restart the running total for each group, such as each customer. With a frame, AVG(total) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) gives a three-row moving average.
LAG(column) returns the value from the previous row, and LEAD(column) from the next one, in the order given in OVER. They're how you work out the change from one period to the next: revenue - LAG(revenue) OVER (ORDER BY month). The first row has no previous row, so LAG returns NULL there.
With ORDER BY in OVER, rows that tie on the sort column are added together, so two orders on the same date show the same running total. Add a tie-breaker, like ORDER BY order_date, order_id, when you need one row at a time.