Temps de première réponse pour un groupe de support

En travaillant avec @icaria36 pour améliorer son utilisation des groupes Discourse comme système de support, nous avons développé quelques requêtes (d’autres suivront). Faites-nous savoir si vous repérez des problèmes ou des améliorations :slight_smile:

Temps de première réponse pour un groupe de support

  • Nombre moyen de jours sur une période donnée : (du 2019-04-04 au 2019-04-06 dans l’exemple)
  • Ne compte que les jours ouvrables (c’est-à-dire en excluant le samedi et le dimanche)
  • Ne compte pas certains jours fériés sélectionnés (le 2019-04-11 dans l’exemple)
  • Le nom du groupe dans l’exemple est ‘support’
SELECT AVG(t.days)::float AS "Nombre moyen de jours ouvrables jusqu'à la première réponse"
FROM (
  SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "premiere_reponse_created_at", (
    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 "jours"
  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

Pour tester que la requête fonctionne correctement, vous pouvez modifier le SELECT en remplaçant la moyenne par :

t.days as "jours ouvrables", t.title, t.created_at, t.premiere_reponse_created_at

Par exemple, sur mon Sandbox, lorsque je fais cela, j’obtiens :

Remarques :

  • Voulez-vous compter les réponses le même jour comme 0 ou 1 ? (actuellement c’est 1)
  • Comment voulez-vous gérer les messages sans réponse ? (c’est-à-dire doivent-ils être exclus, ou combien de jours leur attribuer ?). Actuellement, les messages sans réponse sont exclus du comptage.

Nombre de messages reçus dans un groupe donné.

  • Le nom du groupe dans l’exemple est ‘support’
  • Comptage sur une période donnée : (du 2019-04-04 au 2019-04-06 dans l’exemple)
SELECT count(t) as "Nombre de messages"
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 « J'aime »