Temps de réponse initial d’un groupe pour les sujets créés au cours d’une période donnée
Renvoie le temps écoulé jusqu’à la première réponse d’un membre d’un groupe donné à des sujets « réguliers » (et non des messages privés) créés par un utilisateur qui n’appartient pas à ce groupe. Le paramètre :group_name de la requête est défini par défaut sur « staff ». Avec cette valeur, elle indique le temps de réponse initial des membres du personnel. Vous pouvez modifier la valeur de ce paramètre pour obtenir les temps de réponse de différents groupes, par exemple « customer_support ».
Notez que les dates doivent techniquement être fournies au format aaaa-mm-jj, mais la requête accepte également les dates au format jj-mm-aaaa.
-- [params]
-- date :start_date
-- date :end_date
-- string :group_name = staff
WITH group_response_times AS (
SELECT
t.category_id,
t.id AS topic_id,
EXTRACT(EPOCH FROM (p.created_at - t.created_at)) / 60 AS response_time_minutes,
p.user_id AS staff_user_id,
ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY p.created_at) AS row_num
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.user_id NOT IN (SELECT user_id
FROM group_users gu JOIN groups g ON g.id = gu.group_id
WHERE gu.user_id > 0 AND g.name = :group_name)
AND p.user_id IN (SELECT user_id
FROM group_users gu JOIN groups g ON g.id = gu.group_id
WHERE gu.user_id > 0 AND g.name = :group_name)
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
AND p.post_type = 1
AND p.deleted_at IS NULL
AND t.created_at BETWEEN :start_date AND :end_date
)
SELECT
category_id,
topic_id,
staff_user_id,
ROUND(response_time_minutes::numeric, 2) AS response_time_minutes
FROM group_response_times
WHERE row_num = 1
ORDER BY category_id, response_time_minutes
Temps moyen de réponse initial d’un groupe par catégorie :
Utilise la même logique que la requête précédente, mais renvoie le temps moyen jusqu’à la première réponse des membres du groupe donné par catégorie pour les sujets créés par des utilisateurs qui ne font pas partie de ce groupe au cours de la période définie par les paramètres :start_date et :end_date. Comme pour la requête précédente, si le paramètre :group_name est laissé à sa valeur par défaut « staff », il renverra les temps moyens de première réponse du personnel pour les sujets réguliers créés par des utilisateurs non membres du personnel.
-- [params]
-- date :start_date
-- date :end_date
-- string :group_name = staff
WITH group_response_times AS (
SELECT
t.category_id,
t.id AS topic_id,
EXTRACT(EPOCH FROM (p.created_at - t.created_at)) / 60 AS response_time_minutes,
p.user_id AS staff_user_id,
ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY p.created_at) AS row_num
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.user_id NOT IN (SELECT user_id
FROM group_users gu JOIN groups g ON g.id = gu.group_id
WHERE gu.user_id > 0 AND g.name = :group_name)
AND p.user_id IN (SELECT user_id
FROM group_users gu JOIN groups g ON g.id = gu.group_id
WHERE gu.user_id > 0 AND g.name = :group_name)
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
AND p.post_type = 1
AND p.deleted_at IS NULL
AND t.created_at BETWEEN :start_date AND :end_date
)
SELECT
category_id,
ROUND(AVG (response_time_minutes)::numeric, 2) AS average_response_time_minutes,
COUNT(*) AS num_topics_with_staff_responses
FROM group_response_times
WHERE row_num = 1
GROUP BY category_id

