Dies ist eine SQL-Version des Dashboard-Berichts für die Zeit bis zur ersten Antwort.
Dieser Dashboard-Bericht liefert Einblicke in die durchschnittliche Antwortzeit auf Themen innerhalb eines bestimmten Datumsbereichs. Der Bericht berechnet die Zeit, die für die erste Antwort benötigt wird, die von jemand anderem als dem Ersteller des Themas gepostet wird.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- null category_id :category_id
-- boolean :include_subcategories = false
-- null user_id :user_ids
-- Zeit bis zur ersten Antwort nach Datum
SELECT
t.created_at AS "date",
CAST(AVG(t.hours)::numeric(10,2) AS float) AS "response_time_hours"
FROM (
SELECT
t.id,
t.created_at::date AS created_at,
EXTRACT(EPOCH FROM MIN(p.created_at) - t.created_at)::float / 3600.0 AS "hours"
FROM topics t
JOIN posts p ON p.topic_id = t.id
WHERE
t.created_at >= :start_date
AND t.created_at < :end_date
AND t.archetype <> 'private_message'
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND p.post_number > 1
AND p.user_id != t.user_id
AND p.post_type = 1 -- Regulärer Post-Typ
AND EXTRACT(EPOCH FROM p.created_at - t.created_at) > 0
AND (:category_id IS NULL OR
CASE WHEN :include_subcategories THEN
t.category_id IN (
WITH RECURSIVE subcategories AS (
SELECT id FROM categories WHERE id = :category_id
UNION
SELECT c.id FROM categories c
JOIN subcategories sc ON sc.id = c.parent_category_id
)
SELECT id FROM subcategories
)
ELSE
t.category_id = :category_id
END
)
AND (:user_ids IS NULL OR p.user_id IN (SELECT unnest(string_to_array(:user_ids, ','))::int))
GROUP BY t.id
) t
GROUP BY t.created_at
ORDER BY t.created_at
SQL-Abfrageerklärung
Dieser Bericht misst, wie schnell Themen ihre erste aussagekräftige Antwort erhalten, indem er:
- Antwortzeit berechnen: Findet für jedes Thema den ersten Beitrag, der:
- Nicht vom ursprünglichen Themaersteller stammt
- Eine Beitragsnummer > 1 hat (nicht der erste Beitrag)
- Ein regulärer Beitrag ist (post_type = 1)
- Nach dem Thema erstellt wurde (positive Zeitdifferenz)
- Nicht gelöscht wurde
- Nach Datum gruppieren: Aggregiert diese Antwortzeiten nach dem Datum, an dem das Thema erstellt wurde.
- Ergebnisse zeigen:
- „date“: Das Datum, an dem die Themen erstellt wurden.
- „hours“: Durchschnittliche Zeit (in Stunden) bis zur ersten Antwort für an diesem Datum erstellte Themen.
- Ausschlüsse:
- Private Nachrichten werden ausgeschlossen.
- Gelöschte Themen und Beiträge werden ausgeschlossen.
- Selbstantworten werden ausgeschlossen.
Parameter
:start_date(Datum) - FormatJJJJ-MM-TT- Startdatum für den Berichtszeitraum
- Nur Themen, die an oder nach diesem Datum erstellt wurden, werden einbezogen
:end_date(Datum) - FormatJJJJ-MM-TT- Enddatum für den Berichtszeitraum
- Nur Themen, die vor diesem Datum erstellt wurden, werden einbezogen
:category_id(category_id, nullfähig)- Wenn angegeben, filtert die Ergebnisse auf eine bestimmte Kategorie
- Wenn null, werden Themen aus allen Kategorien einbezogen
:include_subcategories(boolean) - Standard: false- Wenn true UND eine category_id angegeben ist, werden Themen aus allen Unterkategorien einbezogen
- Wenn false, werden nur Themen aus der exakt angegebenen Kategorie einbezogen
:user_ids(user_id, nullfähig)- Wenn angegeben, werden nur Antworten von bestimmten Benutzern einbezogen
- Wenn null, werden Antworten von allen Benutzern einbezogen
- Kann mehrere Benutzer-IDs als durch Kommas getrennte Liste akzeptieren
Beispielergebnisse
| date | response_time_hours |
|---|---|
| 2023-11-12 | 29.87 |
| 2023-11-13 | 81.52 |
| 2023-11-14 | 5.17 |
| 2023-11-15 | 6.51 |
| 2023-11-16 | 7.75 |
| … | … |