2011-06-06 3 views
1

J'essaye d'écrire une requête où je peux obtenir un compte sur des user_id distincts dans une table de transactions d'une base de données tous les 3 mois.Combinaison de plusieurs requêtes MySQL en une seule

je peux obtenir le résultat manuellement si je fais ce qui suit

SELECT COUNT(DISTINCT(user_id)) FROM transactions WHERE DATE(created_at) BETWEEN "2011-01-01" AND "2011-03-31". 

Mais si je veux courir ce automatiquement au fil des années des périodes trimestrielles, il faudrait toujours.

Existe-t-il un moyen d'intégrer ce type de chose dans une seule requête?

Répondre

5
SELECT COUNT(DISTINCT user_id),YEAR(created_at), QUARTER(created_at) 
FROM transactions 
GROUP BY YEAR(created_at), QUARTER(created_at) 
+0

incroyable. Gains de temps Je n'ai pas réalisé que GROUP BY avait pour effet de limiter les résultats de la fonction. Mais il est évident que ce serait ... merde! Merci! – Darren

3

Est-ce que cela va faire ce que vous demandez?

select user_id, year(created_at) as `year`, quarter(created_at) as `quarter`, count(*) 
from transactions 
group by user_id, year(created_at), quarter(created_at) 
1

Qu'en est-il quelque chose comme ceci:

SELECT COUNT(DISTINCT USER_ID), 
     QUARTER(created_at), 
     YEAR(created_at)  
    FROM transactions 
GROUP BY YEAR(created_at), QUARTER(created_at); 
Questions connexes