2012-06-07 8 views
0

J'ai une page affichant les statistiques des utilisateurs et je me demande quelle est la meilleure façon d'obtenir les statistiques hebdomadaires, mensuelles, annuelles et toutes les heures d'une table dans une requête?Récupérer des données hebdomadaires, mensuelles et annuelles en une seule requête

Pour le moment j'utilise des requêtes séparées pour vérifier les résultats dans chaque plage de dates, mais il doit y avoir une meilleure façon. À titre d'exemple, j'aimerais compter toutes les lignes «votes» = «1» du mois, de la semaine et de l'année passés.

+0

Veuillez indiquer la structure de votre table, au moins une approximation. – dasblinkenlight

Répondre

5
SELECT 
    user_id, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 WEEK,votes,0)) votes_weekly, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 MONTH,votes,0)) votes_monthly, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 YEAR,votes,0)) votes_yearly 
FROM table 
WHERE ts>CURRENT_DATE - INTERVAL 1 YEAR 
GROUP BY user_id; 
+0

'CURRENT_DATE - INTERVAL 1 ' équivaut à soustraire les jours ne déplaçant pas la date au début de la semaine/mois/etc; les données peuvent donc ne pas être exactes à toutes les dates, sauf en ce qui concerne le premier jour de la semaine, le mois, etc. Selon la sensibilité des données, cette réponse peut être désastreuse. – srcspider

Questions connexes