Spesso si desidera estrarre dati per un periodo di tempo specifico. È possibile farlo codificando nel codice il periodo di tempo nella query stessa, ma per rendere il report più a prova di futuro è possibile aggiungere un parametro di data:
Questa query è progettata per contare il numero totale di post in ciascuna categoria (esclusi post e argomenti eliminati, messaggi privati e argomenti senza categoria) creati entro un intervallo di date specifico, quindi ordinare le categorie per numero totale di post in ordine decrescente.
-- [params]
-- date :start_date -- Questo è un parametro per la data di inizio dell'intervallo
-- date :end_date -- Questo è un parametro per la data di fine dell'intervallo
SELECT
t.category_id,
COUNT(p.id) AS "Total Posts" -- Conta il numero di post in ciascuna categoria
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtra i post creati tra la data di inizio e la data di fine (::date converte il timestamp di created_at in una data)
AND t.deleted_at IS NULL
AND p.deleted_at IS NULL
AND t.archetype <> 'private message'
AND p.user_id > 0
AND t.category_id IS NOT NULL
GROUP BY 1
ORDER BY 2 DESC
L’utilizzo dello stile di parametro date anziché string rende l’inserimento del valore del parametro molto più intuitivo, soprattutto quando viene condiviso con altri.
Un altro suggerimento degno di nota per questo tipo di query è quello di convertire created_at in una data. Poiché il valore è memorizzato nel database come timestamp, se non lo si converte in una data, la query non recupererà i risultati dalla data di :end_date stessa.
È possibile verificare quali valori sono memorizzati come timestamp utilizzando l’albero di Explorer:
Questa query è principalmente un esempio per dimostrare i principi. Speriamo che la trovi utile, ma in caso di domande, chiedi pure qui sotto. ![]()
