Cela devrait vous fournir tous les utilisateurs qui ont soit lu en étant connectés, soit publié au cours de la dernière année. L’explorateur de données affichera également leur nombre.
SELECT p.user_id
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date > CURRENT_TIMESTAMP - INTERVAL '365 days'
AND t.deleted_at IS NULL
AND t.visible = TRUE
AND t.closed = FALSE
AND t.archived = FALSE
AND t.archetype = 'regular'
AND p.deleted_at IS NULL
UNION
SELECT u.user_id
FROM user_visits u
WHERE u.posts_read > 0
AND u.visited_at > CURRENT_TIMESTAMP - INTERVAL '365 days'
ORDER BY user_id
Il existe probablement une méthode plus efficace pour le faire, mais cela fonctionne
. Si vous souhaitez une période spécifique, vous pouvez remplacer > CURRENT_TIMESTAMP - INTERVAL '365 days' (les deux occurrences) par quelque chose comme ceci : BETWEEN '20200101'::date AND '20210101'::date .
Vous avez fourni d’excellentes informations et références dans votre question ! Je n’ai eu qu’à sélectionner les éléments pertinents et les combiner.