Gamifizierung und Einladungen

Würde etwas in dieser Art besser funktionieren (angepasst an das scorable query-Format – dies ist ein Test für den Data Explorer :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

Wenn ein Benutzer gelöscht wird, wird er aus der Tabelle invited_users entfernt und wäre somit nicht mehr in der Zählung enthalten. Wenn die Löschung innerhalb von 10 Tagen erfolgte, würde sie automatisch korrigiert werden, wenn sie länger dauert, müsste eine manuelle Score-Aktualisierung erfolgen.

Die Verwendung des redeemed_at-Datums würde diejenigen Einladungen berücksichtigen, die vor mehr als 10 Tagen erstellt wurden.

AND iu.user_id <> i.invited_by_id würde auch Selbst-Einladungen ausschließen.

Das Hinzufügen der users-Tabelle und die Bedingung AND u.created_at > iu.redeemed_at würden auch das Einladen bestehender Benutzer ausschließen.

3 „Gefällt mir“