Vous recherchez Ecto.Query.API.ago/2 et Ecto.Query.API.from_now/2 pour interroger l'intervalle et Ecto.Query.subquery/2 pour select intérieur .
Aussi, Repo.all/2 attend une requête comme premier argument, tandis que vous passez FriendReferralCode comme premier argument dans l'appel à Repo.all/2 , où il attend une requête, et query comme un second, où il attend une liste d'options de mots-clés.
Faites juste query |> Repo.all() à la place.