Zeit bis zur ersten Gruppenantwort für Themen, die innerhalb eines bestimmten Zeitraums erstellt wurden
Gibt die Zeit bis zur ersten Antwort eines Mitglieds einer bestimmten Gruppe auf „normale" (keine persönlichen Nachrichten) Themen zurück, die von einem Benutzer erstellt wurden, der nicht Mitglied dieser Gruppe ist. Der Parameter :group_name der Abfrage ist standardmäßig auf „staff" festgelegt. Mit diesem Wert wird die Zeit bis zur ersten Antwort durch Mitarbeiter angezeigt. Sie können den Wert dieses Parameters ändern, um Antwortzeiten für verschiedene Gruppen zu erhalten, z. B. „customer_support".
Beachten Sie, dass Daten technisch gesehen im Format jjjj-mm-tt angegeben werden sollten, die Abfrage jedoch auch Daten im Format tt-mm-jjjj akzeptiert.
-- [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(EPOCH FROM (p.created_at - t.created_at)) / 60 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,
ROUND(response_time_minutes::numeric, 2) AS response_time_minutes
FROM group_response_times
WHERE row_num = 1
ORDER BY category_id, response_time_minutes
Durchschnittliche Zeit bis zur ersten Gruppenantwort pro Kategorie:
Verwendet dieselbe Logik wie die vorherige Abfrage, gibt jedoch die durchschnittliche Zeit bis zur ersten Antwort durch Mitglieder der angegebenen Gruppe pro Kategorie für Themen zurück, die von Benutzern erstellt wurden, die nicht Mitglied dieser Gruppe sind, innerhalb des durch die Parameter :start_date und :end_date festgelegten Zeitraums. Wie bei der vorherigen Abfrage wird, wenn der Parameter :group_name auf dem Standardwert „staff" belassen wird, die durchschnittliche erste Antwortzeit der Mitarbeiter für normale Themen zurückgegeben, die von Nicht-Mitarbeitern erstellt wurden.
-- [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(EPOCH FROM (p.created_at - t.created_at)) / 60 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,
ROUND(AVG (response_time_minutes)::numeric, 2) AS average_response_time_minutes,
COUNT(*) AS num_topics_with_staff_responses
FROM group_response_times
WHERE row_num = 1
GROUP BY category_id

