Eu tenho um com o qual estava brincando, embora o tenha deixado de lado para analisá-lo com novos olhos e ainda não voltei a ele, então pode precisar de algum trabalho. É para conceder um distintivo com base em obter pelo menos 10 postagens com a reação
dada por um membro do grupo ‘data-team’ para postagens na categoria Data & reporting
SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
AND EXISTS (
SELECT 1
FROM discourse_reactions_reactions dr
JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
JOIN group_users gu ON gu.user_id = dru.user_id
WHERE dr.post_id = p.id
AND dr.reaction_value = 'chefs_kiss'
AND gu.group_id = 175
)
GROUP BY p.user_id
HAVING COUNT(*) >= 10
Embora eu não estivesse satisfeito com o uso de MIN, pois ele fornecia a data incorreta de concessão.
Há muitos critérios para isso, e é automático, o que acho que o empurra para o lado mais complicado. Acho que um mais simples poderia ser muito mais alcançável sem muito esforço.