# Dashboard-Bericht - Themen ohne Antwort

**URL:** <https://meta.discourse.org/t/dashboard-report-topics-with-no-response/294002>\
**Category:** Data & reporting\
**Tags:** sql-query, dashboard-reports, dashboard-sql\
**Created:** [2. Februar 2024 um 22:55 UTC](https://meta.discourse.org/t/dashboard-report-topics-with-no-response/294002 "2024-02-02T22:55:48Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![SaraDev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/saradev/32/335139_2.png) [@SaraDev](https://meta.discourse.org/u/SaraDev)\
**Post date:** [2. Februar 2024 um 22:55 UTC](https://meta.discourse.org/t/dashboard-report-topics-with-no-response/294002/1 "2024-02-02T22:55:48Z")

</div>

Dies ist eine SQL-Version des Dashboard-Berichts für Themen ohne Antwort.  
Der Dashboard-Bericht ist so konzipiert, dass er die Anzahl der Themen zählt, die innerhalb eines bestimmten Datumsbereichs erstellt wurden und auf die keine Antworten von anderen Benutzern eingegangen sind. Dieser Bericht kann nach einer bestimmten Kategorie gefiltert werden und optional Unterkategorien einschließen.

```sql
-- [params]
-- date :start_date = 2024-01-01    
-- date :end_date = 2024-02-01
-- null int :category_id
-- boolean :include_subcategories = false

WITH no_response_total AS (
SELECT *
    FROM (
      SELECT t.id, t.created_at, MIN(p.post_number) first_reply
      FROM topics t
      LEFT JOIN posts p ON p.topic_id = t.id AND p.user_id != t.user_id AND p.deleted_at IS NULL AND p.post_type = 1
      WHERE t.archetype <> 'private_message'
      AND t.deleted_at ISNULL
      AND (
        :category_id IS NULL
        OR t.category_id = :category_id
        OR (
          :include_subcategories
          AND t.category_id IN (
            SELECT id FROM categories WHERE parent_category_id = :category_id
          )
        )
      )
      GROUP BY t.id
    ) tt
    WHERE tt.first_reply IS NULL OR tt.first_reply < 2
)

SELECT 
  DATE(nrt.created_at) AS date, 
  COUNT(nrt.id) AS topics_without_response
FROM no_response_total nrt
WHERE nrt.created_at::date BETWEEN :start_date AND :end_date
GROUP BY date
ORDER BY date ASC

```

### Parameter

- **Datumsangaben** :
  - Die Abfrage akzeptiert zwei Parameter, `:start_date` und `:end_date`, die den Datumsbereich für den Bericht definieren. Beide Datumsangaben akzeptieren das Datumsformat `JJJJ-MM-TT`.

- **Kategorieparameter** :
  - `:category_id`: Ein Integer-Parameter, der auf die ID einer bestimmten Kategorie gesetzt werden kann, um die Analyse auf Beiträge innerhalb dieser Kategorie zu beschränken. Wenn er auf null gesetzt oder nicht angegeben wird, werden Themen aus allen Kategorien berücksichtigt.
  - `:include_subcategories`: Ein boolescher Parameter, der steuert, ob Beiträge aus Unterkategorien der angegebenen `:category_id` eingeschlossen werden sollen. Wenn er auf true gesetzt ist, enthält der Bericht Links zu Beiträgen sowohl in der angegebenen Kategorie als auch in ihren Unterkategorien; wenn false, wird nur die angegebene Kategorie berücksichtigt.

### Erklärung der SQL-Abfrage

Die Abfrage beginnt mit einem Common Table Expression (CTE) namens `no_response_total`. Dieser CTE führt die folgenden Schritte aus:

- **Auswahl von Themen** : Er wählt alle Themen (`t.id`) und ihre Erstellungsdaten (`t.created_at`) aus der Tabelle `topics` aus.
- **Left Join mit Beiträgen** : Er führt einen Left Join mit der Tabelle `posts` durch, um die erste Antwort auf jedes Thema zu finden. Die Join-Bedingungen stellen sicher, dass der Beitrag nicht vom Ersteller des Themas stammt (`p.user_id != t.user_id`), der Beitrag nicht gelöscht wurde (`p.deleted_at IS NULL`) und der Beitrag vom Typ 1 ist, was typischerweise eine Standardantwort darstellt.
- **Filtern von Themen** : Die Abfrage filtert Themen heraus, die private Nachrichten sind (`t.archetype <> 'private_message'`) und Themen, die gelöscht wurden (`t.deleted_at ISNULL`).
- **Kategoriefilterung** : Wenn eine `:category_id` angegeben ist, filtert die Abfrage Themen, um nur die in der angegebenen Kategorie einzuschließen. Wenn `:include_subcategories` true ist, werden auch Themen aus Unterkategorien der angegebenen Kategorie eingeschlossen.
- **Gruppierung und minimale Beitragsnummer** : Die Themen werden nach ihrer ID gruppiert und die minimale Beitragsnummer (`MIN(p.post_number)`) berechnet, um die erste Antwort zu finden.
- **Filtern auf keine Antwort** : Die Unterabfrage `tt` filtert Themen heraus, deren erste Antwort eine Beitragsnummer von 2 oder höher hat, und lässt nur Themen ohne Antwort (`tt.first_reply IS NULL`) oder nur den ursprünglichen Beitrag (`tt.first_reply < 2`) übrig.

Nachdem der CTE `no_response_total` definiert wurde, führt die Hauptabfrage Folgendes aus:

- **Filtern nach Datumsbereich** : Sie filtert die Themen aus dem CTE nach den angegebenen Start- und Enddaten (`:start_date` und `:end_date`).
- **Zählen von Themen ohne Antwort** : Sie zählt die Anzahl der Themen ohne Antwort für jedes Datum innerhalb des angegebenen Bereichs.
- **Gruppierung nach Datum** : Die Ergebnisse werden nach dem Datum der Themen-Erstellung gruppiert (`DATE(nrt.created_at)`).
- **Sortierung** : Die Ergebnisse werden nach Datum in aufsteigender Reihenfolge sortiert.

### Beispielergebnisse

| date | topics\_without\_response |
| --- | --- |
| 2024-01-02 | 4 |
| 2024-01-03 | 8 |
| 2024-01-04 | 4 |
| 2024-01-05 | 3 |
| 2024-01-06 | 3 |

---

_[View the full topic](https://meta.discourse.org/t/dashboard-report-topics-with-no-response/294002)._
