Me deparei com esta pergunta enquanto procurava minha própria resposta. Eu pensei em deixar minha solução aqui, pois é outra maneira de realizar a mesma tarefa e pode ser mais eficiente. O truque é a auto-junção usando
>=
SELECT s1.ID, s1.name, s1.money, sum(s2.money) as accumulator
FROM student s1
INNER JOIN student s2 ON s1.id >= s2.id
GROUP BY s1.id HAVING accumulator <= 500;