Time to first response by group members

Non lo è. Onestamente, non sono sicuro di come abbia mai funzionato. Pubblicherò presto una versione aggiornata e ti avviserò quando sarà pronta.

Modifica: @IreneT
Ecco una versione corretta della query originale. Ignorerei quella query e guarderei le altre query che ho pubblicato in questa risposta. Fammi sapere se hai domande sulle query o se riscontri problemi nell’aggiungere i parametri richiesti alle query. Dai test di oggi, sto scoprendo che devo aggiornare la pagina dopo aver salvato una query di Data Explorer affinché i campi di immissione dei parametri vengano visualizzati sotto la query. (Potrebbe essere solo una stranezza del mio sito di sviluppo locale.)

-- [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 medio di prima risposta",
COUNT(1) AS "Argomenti a cui è stata data risposta"
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

Ciò che è stato modificato è:

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

Sarei sorpreso se avessi scritto la vecchia query senza testarla. In ogni caso, la versione aggiornata funziona come previsto ora.

A memoria, questa query è stata scritta per un sito specifico e non era intesa per essere pubblicata su Meta. Ecco un paio di altre query utili per ottenere informazioni sui tempi di risposta dello staff:

Tempo alla prima risposta di gruppo per argomenti creati entro un dato periodo di tempo

Restituisce il tempo alla prima risposta di un membro di un dato gruppo a argomenti “regolari” (non messaggi personali) creati da un utente che non è membro del dato gruppo. Il parametro :group_name della query è impostato su “staff” per impostazione predefinita. Con questo valore, darà il tempo alla prima risposta dei membri dello staff. Puoi cambiare il valore di quel parametro per ottenere i tempi di risposta per gruppi diversi. Ad esempio “customer_support”.

Nota che le date dovrebbero tecnicamente essere fornite nel formato aaaa-mm-gg, ma la query accetterebbe anche date nel formato gg-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 medio alla prima risposta di gruppo per categoria:

Utilizza la stessa logica della query precedente, ma restituisce il tempo medio alla prima risposta dei membri del dato gruppo per categoria per argomenti creati da utenti che non sono membri del dato gruppo nel periodo di tempo impostato dai parametri :start_date e :end_date. Come per la query precedente, se il parametro :group_name viene lasciato al suo valore predefinito “staff”, restituirà i tempi medi di prima risposta dello staff per argomenti regolari creati da utenti non staff.

-- [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, forse sostituisci la query nell’OP con le ultime due query in questo post. Inoltre, probabilmente aggiorna il titolo in qualcosa come “Tempo alla prima risposta dei membri del gruppo”.

3 Mi Piace