首先将login,passing_number,user根据user_id和date连接,将范围限制在有刷题的日期。然后选出user name,刷题日期并用sum()搭配窗口函数根据user_id分组汇总并按date的顺序对passing_number每天进行累加,就能得到每个人在每个刷题日的刷题累计总合。不得不说聚合加窗口真是个神奇的功能。最后根据date和用户名排序。

select u.name as u_n, l.date, 
sum(p.number) over (partition by p.user_id order by p.date)
from login as l, passing_number as p, user as u
where l.user_id = p.user_id and l.user_id = u.id and l.date = p.date
order by l.date, u.name