支持小组的首次响应时间

在为 @icaria36 改进其使用 Discourse 群组作为支持系统的过程中,我们开发了一些查询(后续还将有更多)。如果您能发现任何问题或改进建议,请随时告知 :slight_smile:

支持群组的首次响应时间

  • 特定时间段内的平均天数(示例:2019-04-04 至 2019-04-06)
  • 仅计算工作日(即排除周六和周日)
  • 不计算选定的公共假日(示例:2019-04-11)
  • 示例中的群组名称为 ‘support’
SELECT AVG(t.days)::float AS "首次响应平均工作日"
FROM (
  SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "首次回复创建时间", (
    SELECT count(*) FILTER (
      WHERE d not in ('2019-04-11')
      AND extract('ISODOW' FROM d) < 6
    )
    FROM generate_series(t.created_at::timestamp::date
                        , MIN(p.created_at)::timestamp::date
                        , interval '1 day') as s(d)
  ) as "days"
  FROM topics t
  INNER JOIN posts p ON p.topic_id = t.id AND (
    CASE WHEN p.post_number = 1
    THEN p.via_email IS TRUE 
    ELSE true 
    END
  )
  WHERE t.archetype = 'private_message'
  AND t.id IN (
    SELECT topic_id FROM topic_allowed_groups
    WHERE group_id IN (SELECT id FROM groups WHERE name ilike 'support')
  )
  AND t.deleted_at IS NULL
  AND t.created_at::timestamp::date >= '2019-04-04'
  AND t.created_at::timestamp::date <= '2019-04-06'
  AND p.deleted_at IS NULL
  AND p.post_number > 1
  GROUP BY t.id
) t

要测试查询是否正常工作,您可以将 SELECT 中的平均值更改为:

t.days as "工作日", t.title, t.created_at, t.first_reply_created_at

例如,在我的沙箱环境中执行此操作时,结果如下:

注意事项:

  • 您希望将同一天内的回复计为 0 还是 1?(当前计为 1)
  • 您希望如何处理没有回复的消息?(即是否应排除,或应计为多少天?)目前,没有回复的消息已被排除在计数之外。

特定群组中收到的消息数量

  • 示例中的群组名称为 ‘support’
  • 统计特定时间段内的数量(示例:2019-04-04 至 2019-04-06)
SELECT count(t) as "消息数量"
FROM topics t
WHERE t.archetype = 'private_message'
AND t.id IN (
  SELECT topic_id FROM topic_allowed_groups
  WHERE group_id IN (SELECT id FROM groups WHERE name ilike 'support')
)
AND (
  SELECT via_email FROM posts
  WHERE topic_id = t.id AND post_number = 1 
)
AND t.deleted_at IS NULL
AND t.created_at::timestamp >= '2019-04-04'::timestamp
AND t.created_at::timestamp <= '2019-04-06'::timestamp
8 个赞