Consider below solution
select any_value(r).*,
array_agg(
(select as struct i.* except(user_id))
order by install_date desc
limit 1
)[offset(0)].*
from `project.dataset.revenue` r
join `project.dataset.installs` i
on i.user_id = r.user_id
and install_date < revenue_date
group by format('%t', r)
If applied to sample data in your question - output is
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…