Tiempo hasta la primera respuesta de grupo para temas creados dentro de un período determinado
Devuelve el tiempo hasta la primera respuesta por parte de un miembro de un grupo dado a temas “regulares” (no Mensajes Personales) creados por un usuario que no es miembro del grupo especificado. El parámetro :group_name de la consulta se establece por defecto en “staff”. Con ese valor, proporcionará el tiempo hasta la primera respuesta por parte de miembros del personal. Puede cambiar el valor de este parámetro para obtener tiempos de respuesta para diferentes grupos, por ejemplo, “customer_support”.
Tenga en cuenta que, técnicamente, las fechas deben proporcionarse en el formato yyyy-mm-dd, pero la consulta también aceptará fechas en el formato dd-mm-yyyy.
-- [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
Tiempo promedio hasta la primera respuesta de grupo por categoría:
Utiliza la misma lógica que la consulta anterior, pero devuelve el tiempo promedio hasta la primera respuesta por parte de los miembros del grupo dado por categoría, para temas creados por usuarios que no son miembros del grupo dentro del período de tiempo establecido por los parámetros :start_date y :end_date. Al igual que con la consulta anterior, si el parámetro :group_name se deja con su valor predeterminado de “staff”, devolverá los tiempos promedio de primera respuesta del personal para temas regulares creados por usuarios que no son del personal.
-- [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

