Tengo uno con el que estuve jugando, aunque lo dejé a un lado para mirarlo con ojos frescos y aún no he vuelto a él, así que puede que necesite algo de trabajo. Se trata de otorgar una insignia basada en obtener al menos 10 publicaciones con la reacción
dada por un miembro del grupo ‘data-team’ para publicaciones en la categoría 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
Aunque no me complació usar MIN ya que daba la fecha de concesión incorrecta.
Hay muchos criterios para ello, y es automático, lo que creo que lo empuja hacia el extremo más complicado. Creo que uno más simple podría ser mucho más alcanzable sin demasiado esfuerzo.