ユーザーグループでトピックをフィルタリングする方法

これは少し違うものが必要なようですね。:slight_smile: フォーラムはそれぞれ少しずつ異なるため、ソリューションを適応させる必要があるかもしれませんが、この要件は「‘client’ グループのユーザーによって作成されたトピックで、‘team’ グループのユーザーからの返信がないもの」と説明できます。もしそうであれば、正しい group_ids でこのクエリを適応させれば、望む結果が得られるはずです。

-- [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) -- 'team' グループの group_id
  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) -- 'client' グループの group_id
  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

グループ名を使用するよりも、group_ids を知っている方がスムーズに動作します。グループのJSON(例: /g/admins.json)で確認できますが、次のようなものを使って簡単に検索することもできます。


-- [params]
-- string :group_name

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

また、パラメータ入力ボックスを認識させるために、クエリをデータエクスプローラーに初めてコピー&ペーストしたときは、ページをリフレッシュする必要があります。:+1: