Nel corso del lavoro con @icaria36 per migliorare l’utilizzo dei gruppi Discourse come sistema di supporto, abbiamo sviluppato alcune query (se ne seguiranno altre). Fateci sapere se notate eventuali problemi o suggerimenti di miglioramento ![]()
Tempo fino alla prima risposta per un gruppo di supporto
- Numero medio di giorni in un determinato periodo: (dal 2019-04-04 al 2019-04-06 nell’esempio)
- Vengono contati solo i giorni lavorativi (escludendo sabato e domenica)
- Non vengono inclusi i festivi selezionati (2019-04-11 nell’esempio)
- Il nome del gruppo nell’esempio è ‘support’
SELECT AVG(t.days)::float AS "Giorni lavorativi medi per la prima risposta"
FROM (
SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "prima_risposta_creata_il", (
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 "giorni"
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
Per verificare che la query funzioni correttamente, potete modificare la clausola SELECT da una media a:
t.days as "giorni lavorativi", t.title, t.created_at, t.first_reply_created_at
Ad esempio, nel mio Sandbox quando eseguo questa modifica, ottengo:
Note:
- Desiderate contare le risposte nello stesso giorno come 0 o 1? (attualmente è 1)
- Come desiderate gestire i messaggi senza risposte? (ovvero, dovrebbero essere esclusi o quanti giorni dovrebbero essere attribuiti?). Attualmente, i messaggi senza risposte sono esclusi dal conteggio.
Numero di messaggi ricevuti in un determinato gruppo
- Il nome del gruppo nell’esempio è ‘support’
- Conteggio per un determinato periodo: (dal 2019-04-04 al 2019-04-06 nell’esempio)
SELECT count(t) as "Numero di messaggi"
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
