Cómo filtrar temas por grupo de usuarios

Esto suena a que necesitas algo un poco diferente. :slight_smile: Cada foro es ligeramente diferente, por lo que las soluciones pueden necesitar ser adaptadas, pero describiría este resumen como “temas creados por usuarios del grupo ‘cliente’, sin respuesta de un usuario del grupo ‘equipo’”. Si ese es el caso, podrías adaptar esta consulta con los group_ids correctos y debería hacer lo que quieres:

-- [params]
-- date :start_date = 01/01/2023
-- date :end_date = 01/06/2023

WITH team_replies AS (

SELECT topic_id
FROM posts
WHERE user_id IN (SELECT user_id FROM group_users WHERE group_id = 3) --group_id de tu grupo 'equipo'
  AND post_number <> 1
  AND deleted_at ISNULL
  AND post_type = 1
GROUP BY topic_id
)


SELECT t.created_at::date,
       t.id AS topic_id,
       MIN(p.id) AS first_post_id
FROM topics t
JOIN posts p ON p.topic_id = t.id
WHERE t.user_id IN (SELECT user_id FROM group_users WHERE group_id = 45) -- group_id de tu grupo 'cliente'
  AND t.id NOT IN (SELECT topic_id FROM team_replies)
  AND t.created_at BETWEEN :start_date AND :end_date
  AND t.deleted_at ISNULL
  AND t.archetype = 'regular'
GROUP BY t.id
ORDER BY 1 ASC

Esto funciona más fluidamente si conoces los group_ids en lugar de usar nombres de grupo. Puedes encontrarlos en el JSON del grupo (por ejemplo, /g/admins.json), aunque también puedes usar algo como esto como una búsqueda descarada:


-- [params]
-- string :group_name

SELECT name,
       id
FROM groups
WHERE name LIKE LOWER (:group_name)

Y también necesitarás refrescar la página la primera vez que copies y pegues las consultas en tu explorador de datos para que aparezcan los cuadros de entrada de parámetros. :+1: