Time to first response by group members

Não é. Honestamente, não tenho certeza de como já funcionou. Postarei uma versão atualizada em breve e pingarei você para avisar que está pronta.

Editar: @IreneT
Aqui está uma versão corrigida da consulta original. Eu ignoraria essa consulta e olharia as outras consultas que postei nesta resposta. Me avise se você tiver alguma dúvida sobre as consultas ou se tiver problemas para adicionar os parâmetros necessários às consultas. Com base nos testes de hoje, estou descobrindo que preciso atualizar a página depois de salvar uma consulta do Data Explorer para que os campos de entrada de parâmetros apareçam abaixo da consulta. (Isso pode ser apenas uma peculiaridade no meu site de desenvolvimento local.)

-- [params]
-- int :months_ago = 1

WITH query_period AS (
SELECT
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' as period_start,
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' + INTERVAL '1 month' - INTERVAL '1 second' as period_end
),
staff_responses AS (
SELECT
DISTINCT ON (p.topic_id)
p.topic_id,
p.created_at,
t.category_id,
EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time
FROM posts p
JOIN topics t
ON t.id = p.topic_id
AND t.category_id = ANY ('{46,25,43,40,44,35,22,7,20,17,6,12}'::int[])
JOIN users u
ON u.id = p.user_id
WHERE p.post_number > 1
AND u.admin = 't' OR u.moderator = 't'
ORDER BY p.topic_id, p.created_at
),
user_topics AS (
SELECT
t.id
FROM topics t
JOIN users u
ON u.id = t.user_id
WHERE u.admin = 'f' AND u.moderator = 'f'
)

SELECT
sr.category_id,
AVG(sr.response_time) AS "Tempo Médio de Primeira Resposta",
COUNT(1) AS "Tópicos Respondidos"
FROM staff_responses sr
JOIN query_period qp
ON sr.created_at >= qp.period_start
AND sr.created_at <= qp.period_end
JOIN user_topics t
ON t.id = sr.topic_id
GROUP BY sr.category_id

O que foi alterado foi:

--DATE_TRUNC('minute', p.created_at - t.created_at) AS response_time
EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time

Ficaria surpreso se eu tivesse escrito a consulta antiga sem testá-la. De qualquer forma, a versão atualizada funciona como esperado agora.

De memória, esta consulta foi escrita para um site específico e não se destinava a ser postada no Meta. Aqui estão mais algumas consultas úteis para obter informações sobre os tempos de resposta da equipe:

Tempo para a primeira resposta do grupo para tópicos criados em um determinado período:

Retorna o tempo para a primeira resposta de um membro de um determinado grupo para tópicos “regulares” (não Mensagem Pessoal) criados por um usuário que não é membro do determinado grupo. O parâmetro :group_name da consulta está definido como “staff” por padrão. Com esse valor, ele dará o tempo para a primeira resposta dos membros da equipe. Você pode alterar o valor desse parâmetro para obter tempos de resposta para diferentes grupos. Por exemplo, “customer_support”.

Observe que as datas devem ser fornecidas tecnicamente no formato aaaa-mm-dd, mas a consulta também aceitaria datas no formato dd-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(MINUTE FROM (p.created_at - t.created_at)) 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,
    response_time_minutes
FROM group_response_times
WHERE row_num = 1
ORDER BY category_id, response_time_minutes

Tempo médio para a primeira resposta do grupo por categoria:

Usa a mesma lógica da consulta anterior, mas retorna o tempo médio para a primeira resposta de membros do grupo especificado por categoria para tópicos criados por usuários que não são membros do grupo especificado dentro do período de tempo definido pelos parâmetros :start_date e :end_date. Assim como na consulta anterior, se o parâmetro :group_name for deixado em seu valor padrão “staff”, ele retornará os tempos médios de primeira resposta da equipe para tópicos regulares criados por usuários não pertencentes à equipe.

-- [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(MINUTE FROM (p.created_at - t.created_at)) 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,
    AVG (response_time_minutes) AS average_response_time_minutes,
    COUNT(*) AS num_topics_with_staff_responses
FROM group_response_times
WHERE row_num = 1
GROUP BY category_id

@JammyDodger, talvez substitua a consulta na OP pelas duas últimas consultas neste post. Além disso, provavelmente atualize o título para algo como “Tempo para a primeira resposta por membros do grupo”.

3 curtidas