Questo sembra che tu abbia bisogno di qualcosa di leggermente diverso.
Ogni forum è leggermente diverso, quindi le soluzioni potrebbero dover essere adattate, ma descriverei questo brief come “argomenti creati da utenti nel gruppo ‘client’, senza risposta da un utente nel gruppo ‘team’”. Se è così, potresti adattare questa query con i group_ids corretti e dovrebbe fare quello che vuoi:
-- [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 del tuo gruppo 'team'
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 del tuo gruppo 'client'
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
Questo funziona meglio se conosci i group_ids invece di usare i nomi dei gruppi. Puoi trovarli nel JSON del gruppo (ad esempio, /g/admins.json), anche se puoi anche usare qualcosa di simile come una furbesca ricerca:
-- [params]
-- string :group_name
SELECT name,
id
FROM groups
WHERE name LIKE LOWER (:group_name)
E dovrai anche aggiornare la pagina la prima volta che copi incolli le query nel tuo esploratore di dati per visualizzare le caselle di input dei parametri. ![]()