En el curso de trabajar con @icaria36 para mejorar su uso de los grupos de Discourse como sistema de soporte, hemos desarrollado algunas consultas (se añadirán más). Háganos saber si puede detectar algún problema o mejora ![]()
Tiempo hasta la primera respuesta para un grupo de soporte
- Promedio de días para un período determinado: (del 2019-04-04 al 2019-04-06 en el ejemplo)
- Solo cuenta días laborables (es decir, excluye sábados y domingos)
- No cuenta festivos seleccionados (2019-04-11 en el ejemplo)
- El nombre del grupo en el ejemplo es ‘support’
SELECT AVG(t.days)::float AS "Promedio de días laborables hasta la primera respuesta"
FROM (
SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "first_reply_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 "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
Para probar que la consulta funciona correctamente, puede cambiar el SELECT de un promedio a:
t.days as "días laborables", t.title, t.created_at, t.first_reply_created_at
Por ejemplo, en mi Sandbox al hacer esto, obtengo:
Notas:
- ¿Desea contar las respuestas del mismo día como 0 o 1? (actualmente es 1)
- ¿Cómo desea manejar los mensajes sin respuestas? (es decir, ¿deben excluirse o cuántos días deben asignárseles?). Actualmente, los mensajes sin respuestas se excluyen del recuento.
Número de mensajes recibidos en un grupo determinado.
- El nombre del grupo en el ejemplo es ‘support’
- Recuento para un período determinado: (del 2019-04-04 al 2019-04-06 en el ejemplo)
SELECT count(t) as "Número de mensajes"
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
