Questa è una versione SQL del Report della Bacheca per i Post.
Questo report fornisce un conteggio giornaliero dei post creati entro un intervallo di date specificato. È progettato per monitorare l’attività negli argomenti regolari, escludendo i post dai messaggi privati e da altri archetipi speciali.
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date AS "Giorno",
COUNT(p.id) AS "Conteggio"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
AND p.deleted_at ISNULL
AND t.archetype = 'regular'
AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1
Spiegazione della query SQL
- Parametri:
- La query accetta due parametri,
:start_datee:end_date, che definiscono l’intervallo di date per il report. Entrambi i parametri di data accettano il formato dataAAAA-MM-GG.
- La query accetta due parametri,
La query SQL esegue le seguenti operazioni:
- Selezione dei dati:
- Seleziona la data (
created_at::date) in cui è stato creato ciascun post e la converte in formato data per ignorare la componente oraria. - Conta anche il numero di post (
COUNT(p.id)) creati in ciascuna data.
- Seleziona la data (
- Join:
- La query unisce la tabella
postscon la tabellatopicsutilizzando unINNER JOIN. Questo join garantisce che vengano considerati solo i post associati ad argomenti esistenti. - Filtra gli argomenti eliminati (
t.deleted_at ISNULL).
- La query unisce la tabella
- Filtri:
- Filtra i post per includere solo quelli all’interno dell’intervallo di date specificato (
p.created_at::date BETWEEN :start_date AND :end_date). - Esclude i post eliminati (
p.deleted_at ISNULL). - Limita i risultati ai post di argomenti regolari (
t.archetype = 'regular'). - Considera solo i post con
p.post_type = 1, escludendo azioni del moderatore, sussurri e post di piccole azioni.
- Filtra i post per includere solo quelli all’interno dell’intervallo di date specificato (
- Raggruppamento e Ordinamento:
- I risultati vengono raggruppati per data di creazione del post (
GROUP BY p.created_at::date). - L’output finale è ordinato per data in ordine crescente (
ORDER BY 1), dove1si riferisce alla prima colonna nell’istruzioneSELECT, che è la data.
- I risultati vengono raggruppati per data di creazione del post (
Risultati di esempio
| Giorno | Conteggio |
|---|---|
| 2023-11-12 | 25 |
| 2023-11-13 | 35 |
| 2023-11-14 | 38 |
| 2023-11-15 | 47 |
| 2023-11-16 | 36 |
| 2023-11-17 | 79 |
| … | … |