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.
grâce - espérait trouver un moyen « mieux » que la nidification, mais peut-être pas! –
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