Ao trabalhar com @icaria36 para melhorar o uso dos grupos do Discourse como sistema de suporte, desenvolvemos algumas consultas (mais estão por vir). Avise-nos se identificar algum problema ou área de melhoria ![]()
Tempo para a primeira resposta em um grupo de suporte
- Média de dias em um período definido: (de 2019-04-04 a 2019-04-06 no exemplo)
- Conta apenas dias úteis (ou seja, exclui sábados e domingos)
- Não considera feriados públicos selecionados (2019-04-11 no exemplo)
- O nome do grupo no exemplo é ‘suporte’
SELECT AVG(t.days)::float AS "Média de dias úteis até a primeira resposta"
FROM (
SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "primeira_resposta_em", (
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 "dias"
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 'suporte')
)
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 testar se a consulta está funcionando corretamente, você pode alterar o SELECT de uma média para:
t.days as "dias úteis", t.title, t.created_at, t.primeira_resposta_em
Por exemplo, no meu Sandbox, ao fazer isso, obtenho:
Observações:
- Você deseja contar respostas no mesmo dia como 0 ou 1? (atualmente é 1)
- Como você deseja lidar com mensagens sem respostas? (ou seja, elas devem ser excluídas ou quantos dias devem ser atribuídos?). Atualmente, mensagens sem respostas são excluídas da contagem.
Número de mensagens recebidas em um determinado grupo
- O nome do grupo no exemplo é ‘suporte’
- Contagem para um período definido: (de 2019-04-04 a 2019-04-06 no exemplo)
SELECT count(t) as "Número de mensagens"
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 'suporte')
)
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
