I don't have your database and I'm only guessing at your schema (I have no idea why you need to join the members table, for instance, since as far as I can see you never use any of its fields, but maybe you do but haven't said so explicitly in the query). Also the syntax will probably be a bit different for you, since I don't use MySQL. But this should, for User 21, generate a table for every day starting a year prior to User 21's first point up to today, with the rolling total as it stood on each day.
With
-- Only interested in this one user
PointsForUser as (Select order_day, PointValue from points where UserID=21),
-- Every day, from one year prior to the user's first point to their most recent.
Recursive DateSequence as (
Select (Select max(order_day) from PointsForUser) as one_day
Union all
Select one_day - 1 from DateSequence
where one_day > (Select min(orderdate) - (interval '365 days') from PointsForUser)
),
-- All the points accumulated by the user on each day in question (with nulls replaced by 0)
PointsPerDay as (
Select
DateSequence.one_day as day,
sum(coalesce(PointValue, 0)) as TotalPoints
from DateSequence left join PointsForUser on order_day=day
group by day
order by day asc)
Select
day,
sum(TotalPoints) over (rows 365 preceding) as rolling_total
from PointsPerDay
where day >= (Select min(order_day) from PointsForUser)
order by day
You might want to consider looking at some data warehousing to maintain your stats in.