Dies ist eine SQL-Version des Dashboard-Berichts für das System.
Dieser Dashboard-Bericht liefert eine tägliche Zählung der Anzahl der vom System automatisch gesendeten persönlichen Nachrichten.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-01-01
SELECT
DATE(created_at) AS day,
COUNT(*) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'system_message'
AND created_at BETWEEN :start_date AND :end_date
AND deleted_at IS NULL
AND user_id > 0
GROUP BY DATE(created_at)
ORDER BY day
Erklärung der SQL-Abfrage
Die Abfrage extrahiert Daten aus der Tabelle topics – insbesondere solche, die als persönliche Nachrichten an Benutzer mit dem Untertyp system_message innerhalb eines bestimmten Zeitraums qualifiziert sind. Lassen Sie uns dies aufschlüsseln:
- Datumsparameter:
- Die Abfrage akzeptiert zwei Parameter,
:start_dateund:end_date, die den Datumsbereich für den Bericht definieren. Beide Datumsparameter akzeptieren das DatumsformatJJJJ-MM-TT.
- Die Abfrage akzeptiert zwei Parameter,
- SELECT: Die Abfrage wählt zwei Felder aus:
DATE(created_at) AS day: Dies extrahiert den Datumsteil descreated_at-Zeitstempels und gruppiert Datensätze effektiv nach dem Tag, an dem sie erstellt wurden.COUNT(*) AS notifications_count: Dies zählt die Gesamtzahl der systemgenerierten PMs für jeden Tag.
- FROM: Gibt die Tabelle
topicsals Datenquelle an, die Datensätze aller Themen, einschließlich persönlicher Nachrichten, enthält. - WHERE: Enthält mehrere Filter, um den Datensatz einzugrenzen:
archetype = 'private_message': Schließt nur Einträge ein, die persönliche Nachrichten sind.subtype = 'system_message': Schränkt die Auswahl weiter auf nur systemgenerierte Nachrichten ein.created_at BETWEEN :start_date AND :end_date: Filtert die PMs nach denen, die im durch die Parameter angegebenen Bereich erstellt wurden.deleted_at IS NULL: Schließt gelöschte Nachrichten aus.user_id > 0: Stellt sicher, dass Nachrichten mit echten Benutzerkonten und nicht mit System- oder anonymen Konten verknüpft sind.
- GROUP BY: Gruppiert die Ergebnisse nach dem Tag ihrer Erstellung.
- ORDER BY: Ordnet den endgültigen Ergebnissatz nach dem Tag in aufsteigender Reihenfolge, um eine chronologische Abfolge der täglichen Zählungen zu gewährleisten.
Beispielergebnisse
| Tag | Benachrichtigungsanzahl |
|---|---|
| 2024-01-01 | 5 |
| 2024-01-02 | 7 |
| 2024-01-03 | 11 |
| 2024-01-04 | 14 |
| 2024-01-05 | 8 |