Gamification e inviti

Qualcosa del genere funzionerebbe meglio (adeguato al formato della query valutabile - questo è un test per l’esploratore di dati :slight_smile:):

-- [params]
-- date :start_date
-- date :end_date

SELECT 
    invited_by_id AS user_id,
    COUNT(*) AS user_invites,
    COUNT(*) * 10 AS invite_score
FROM invited_users iu
  JOIN invites i ON i.id = iu.invite_id
  JOIN users u ON u.id = iu.user_id
WHERE iu.redeemed_at::date BETWEEN :start_date AND :end_date
  AND iu.user_id <> i.invited_by_id 
  AND u.created_at > iu.redeemed_at
GROUP BY invited_by_id
ORDER BY user_invites DESC

Quando un utente viene eliminato, viene rimosso dalla tabella invited_users, quindi non sarebbe più nel conteggio. Se l’eliminazione avvenisse entro 10 giorni, verrebbe corretta automaticamente, se più lunga sarebbe necessario un aggiornamento manuale del punteggio.

L’utilizzo della data redeemed_at terrebbe conto degli inviti creati più di 10 giorni fa.

AND iu.user_id <> i.invited_by_id escluderebbe anche gli auto-inviti.

L’unione della tabella users e l’aggiunta di AND u.created_at > iu.redeemed_at escluderebbero anche l’invito di utenti esistenti.

3 Mi Piace