2013-06-24 2 views
2

J'ai une table (nous sommes sur le stockage InfoBright colonnaire et j'utiliser MySQL Workbench comme mon interface) qui permet de suivre essentiellement les utilisateurs et un nombre d'activités avec un datestamp. C'est un tableau agrégé quotidien. Schéma est essentiellementEssayer de comprendre la requête SQL pour désabonnement mensuel utilisateur basée sur un seuil d'activité

 
userid (int) 
activity_count (int) 
date (date) 

Ce que je suis en train de trouver est le nombre de mes utilisateurs sont barattage de mois en mois, avec une base d'un utilisateur actif défini comme l'un avec un nombre mensuel d'activité qui résume à> 10

Pour trouver combien d'utilisateurs sont actifs dans un mois, je suis actuellement en utilisant

 
select year, month, count(distinct user) as users 
from 
(
select YEAR(date) as year, MONTH(date) as month, userid as user, sum(activity_count) as activity 
from table 
group by YEAR(date), MONTH(date), userid 
having activity > 10 
order by YEAR(date), MONTH(date) 
) t1 
group by year, month 

Ne pas être un expert en SQL, je suis sûr que cela peut être amélioré et apprécierait l'entrée sur ce point.

Mon plus grand objectif est bien de comprendre de mois en mois, le nombre des utilisateurs qui sont dans ce compte sont nouveaux ou répéter à partir du mois précédent. Je ne sais pas comment le faire sans ce qui ressemble à une imbécillité ou à une jonction, et je pense que cela devrait être assez simple.

Merci d'avance.

Répondre

0

Je pense que plus d'imbrication est la meilleure façon d'y parvenir. Je chercherais à faire quelque chose comme sélectionner l'utilisateur pour l'année concaténée mini & Mois comme couche intermédiaire à ce qui précède (c'est-à-dire entre les requêtes externes et internes) afin que vous puissiez établir le premier mois que l'utilisateur est devenu actif. Vous pouvez ensuite ajouter une clause where à la requête externe à filtrer afin que seuls les mois dont vous avez besoin soient affichés. Faites-moi savoir si vous avez besoin d'aide pour la syntaxe.

+0

grâce - espérait trouver un moyen « mieux » que la nidification, mais peut-être pas! –

+0

Il n'y a rien de mal à emboîtement, c'est la façon la plus efficace d'exécuter beaucoup de requêtes. SQL a relativement peu de mots-clés (que je vois personnellement comme une force car je peux me souvenir d'eux). Un effet secondaire de c'est il n'y a pas plusieurs façons de Aplatir les requêtes avec une liners que vous pourriez faire dans certains langages de script. – ChrisProsser

Questions connexes