Hola @tpsReports,
No dispongo de una instancia de Discourse muy robusta donde pueda probar esto a fondo, pero creo que esta consulta de Data Explorer podría ayudarte a ir en la dirección correcta. (¡Es probable que alguien más pueda intervenir para refinarla!)
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND t.category_id = '4'
En este ejemplo, he especificado que el tiempo desde la creación de la marca sea de 20 minutos (línea 6), ya que eso es lo que indicaste en tu ejemplo.
En la séptima línea, utilicé el ID de categoría ‘4’, pero necesitarás usar el ID de categoría específico de la categoría que deseas rastrear.
Si deseas poder referirte a la categoría por su nombre, podrías agregar otra unión a la consulta, de modo que se vea así:
SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
JOIN categories c on c.id = t.category_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND c.name = 'General'
Luego, reemplaza ‘General’ en la línea 8 con el nombre de tu categoría. Ten en cuenta que los nombres de las categorías distinguen entre mayúsculas y minúsculas.
¡Por favor, házmelo saber si eso ayuda!