Bonjour,
Voici ce que je souhaite faire :
Table 1 : "visite" idsite (int) date (date)Je souhaite mettre à jour la valeur "historiquevisites" de la table "site" à partir des données de la table "visite" en agrégeant les 90 derniers jours sous la forme suivante : valeur,valeur,valeur,valeur...Table 2 : "site" idsite (int) historiquevisites (text)
ce qui donne par exemple :
J'utilise pour cela le code suivant imbriqué dans une requête SQL :0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,1,1,1,1,1
mais, parce qu'il y a forcément un mais...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 traficsearch90history = (SELECT array_to_string(array(SELECT COUNT(*) FROM visite WHERE idsite = s.idsite) GROUP BY date order by date asc), ','))
la table visite ne contient des valeurs que si le nombre de visite à une date donnée est > 0.
- Il y a donc des cas ou il y a moins de 90 jours de données, il aurait fallut compléter avec des 0
- Il y a donc des cas ou il y a des trous de données, par exemple 2 visites le lundi, 0 le mardi et 6 le mercredi
Logiquement il faudrait à la place d'ordonner par date, prendre la liste des dates des 90 derniers jours de façon croissante, puis contrôler la valeur du COUNT(*) pour la date et si elle est > 0 l'utiliser, sinon mettre 0.
Mais je n'ai pas la moindre idée de comment faire cela.
J'utilise Postgresql 9.1
Si vous avez des suggestions, je suis preneur !
Merci !
Partager