Ajout d'un paramètre de date

Souvent, vous voudrez extraire des données pour une période spécifique. Vous pouvez le faire en codant en dur votre période dans la requête elle-même, mais pour rendre votre rapport plus pérenne, vous pouvez ajouter un paramètre de date :

Cette requête est conçue pour compter le nombre total de publications dans chaque catégorie (à l’exclusion des publications et sujets supprimés, des messages privés et des sujets sans catégorie) qui ont été créés dans une plage de dates spécifique, puis pour trier les catégories par le nombre total de publications dans l’ordre décroissant.

-- [params]
-- date :start_date -- Ceci est un paramètre pour la date de début de la plage
-- date :end_date -- Ceci est un paramètre pour la date de fin de la plage

SELECT
   t.category_id,
   COUNT(p.id) AS "Total Posts" -- Compte le nombre de publications dans chaque catégorie
FROM posts p
  JOIN topics t ON t.id = p.topic_id
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtre les publications créées entre la date de début et la date de fin (::date convertit le timestamp created_at en date)
  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’utilisation du style de paramètre date plutôt que string rend la saisie de la valeur du paramètre beaucoup plus intuitive, surtout lorsqu’elle est partagée avec d’autres.

Une autre astuce notable pour ce type de requête est de convertir created_at en date. Comme la valeur est stockée dans la base de données sous forme de timestamp, si vous ne la convertissez pas en date, la requête ne récupérera pas les résultats à partir de la date de :end_date elle-même.

Vous pouvez vérifier quelles valeurs sont stockées sous forme de timestamps en utilisant l’arborescence Explorer :

Cette requête est principalement un exemple pour démontrer les principes. J’espère que vous la trouverez utile, mais si vous avez des questions, n’hésitez pas à les poser ci-dessous. :slight_smile:

9 « J'aime »
PG::SyntaxError : ERREUR : erreur de syntaxe près de « : »
LIGNE 16 : WHERE p.created_at::date BETWEEN :start_date AND :end_date -…

:tired_face:

4 « J'aime »

Ah oui, il n’aime pas ces commentaires en ligne à côté des paramètres.

-- [params]
-- date :start_date 
-- date :end_date 

SELECT
   t.category_id,
   COUNT(p.id) AS "Total Posts" -- Compte le nombre de publications dans chaque catégorie
FROM posts p 
  JOIN topics t ON t.id = p.topic_id 
WHERE p.created_at::date BETWEEN :start_date AND :end_date -- Filtre les publications créées entre la date de début et la date de fin (::date convertit le timestamp created_at en date)
  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

Celui-ci semble mieux fonctionner. :+1: (Vous devrez peut-être actualiser la page la première fois pour voir les champs de saisie des paramètres)

Merci de m’aider à déboguer les guides. :slight_smile: :trophy:

7 « J'aime »