Avant toute chose, voici la table de travail (MySQL):
CREATE TABLE IF NOT EXISTS hits
(
id int(11) NOT NULL AUTO_INCREMENT,
idApplication int(11) NOT NULL,
action varchar(255) DEFAULT NULL,
idUser varchar(255) DEFAULT NULL,
dateCreation datetime DEFAULT NULL,
PRIMARY KEY (id)
);
A partir de cette table, je dois créer une moyenne d'utilisation (sur action) et d'utilisateurs (sur idUser au moyen de la fonction DISTINCT) par heure sur une tranche de 24h (là c'est encore simple) sur une durée définie d'un jour, une semaine, un mois ou un an.
En gros, il s'agit de pouvoir dire, sur un an (par exemple), quelle est la moyenne d'utilisation et d'utilisateurs à chaque heure de la journée.
Et là, je cale carrément.
Si vous avez des idées... Merci de votre aide
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
Qui dit moyenne d'utilisation dit temps, ou période.
A quoi correspond dateCreation ? Au moment précis du clic je suppose ? Donc tu connais le moment où l'utilisateur entre sur la page, mais connais-tu celui où il quitte la page ?
En fait je ne vois pas trop ce que tu veux dire par moyenne d'utilisation.
Non, il n'y a pas de façon de connaître la durée d'utilisation, c'est plutôt classé en nombre de fois où l'application est utilisée.
Par exemple, le jour 1, l'application est utilisée 3 fois à 8h et 6 fois à 18h, le jour 2 : 4 fois à 8h et 11 fois à 18h, le jour 3 : 2 fois à 8h et 5 fois à 18h.
Il faut donc afficher (c'est un diagramme au final, mais peu importe pour l'instant) sur une tranche de 24h, que l'application est utilisée en moyenne 3 fois par jour à 8h et 8 fois par jour à 18h, depuis trois jours.
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
idUser devrait être un INT je pense, non ?
Sinon pour ta requête :
SELECT idApplication, count(*), count(DISTINCT user_id), HOUR(dateCreationà
FROM tatable
WHERE dateCreation >= debut AND dateCreation < fin
GROUP BY HOUR( dateCreation )
idUser devrait être un INT je pense, non ?
Sinon pour ta requête :
SELECT idApplication, count(*), count(DISTINCT user_id), HOUR(dateCreation)
FROM tatable
WHERE dateCreation >= debut AND dateCreation < fin
GROUP BY HOUR( dateCreation )
En fait, idUser est l'udid des iPhone, qui comprends donc une série de caractères (chiffres et lettres) assez longue.
Sinon, comme l'a dit Zazou l'utilisation de la fonction average (AVG, que je connaissais déjà mais merci quand même à toi ) me semble nécéssaire pour obtenir une moyenne... Je n'ai pas la possibilité de tester ici, mais avec la requête que tu proposes, il me semble bien à vue de bourre que je ne vais obtenir que le nombre total d'utilisations de l'application et d'utilisateurs différents par heure dans une fourchette de temps (ce que je fais déjà par ailleurs). Or là je veux précisément une moyenne du nombre d'utilisateurs et d'utilisations par heure de la journée (de 0 à 23 donc) DEPUIS une période donnée.
Je reprends mon exemple :
Par exemple, le jour 1, l'application est utilisée 3 fois à 8h et 6 fois à 18h, le jour 2 : 4 fois à 8h et 11 fois à 18h, le jour 3 : 2 fois à 8h et 5 fois à 18h.
Il faut donc afficher (c'est un diagramme au final, mais peu importe pour l'instant) sur une tranche de 24h, que l'application est utilisée en moyenne 3 fois par jour à 8h et 8 fois par jour à 18h, depuis trois jours.
Merci de votre aide à tous, je suis toujours ouvert à vos propositions
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
> il me semble bien à vue de bourre que je ne vais obtenir que le nombre total d'utilisations de l'application et d'utilisateurs différents par heure dans une fourchette de temps
Oui...
> Or là je veux précisément une moyenne du nombre d'utilisateurs et d'utilisations par heure de la journée (de 0 à 23 donc) DEPUIS une période donnée.
Ben tu divises le count() par le nombre de jours dans la fourchette, et ça donne le nombre moyen par jour.
Si tu tiens absolument à utiliser avg() tu peux faire une sous-requête mais je vois pas trop l'intérêt.
Alors,
Pour l'instant j'ai fait une requête imbriquée, mais c'est vrai que c'est lourd... :
SELECT duree, AVG(hits.countApp) AS nbUtilisation, AVG(hits.countUser) AS nbutilisateurs
FROM(
SELECT COUNT(action='application.start') AS countApp,
COUNT(DISTINCT udid) AS countUser,
HOUR(created_at) AS duree
FROM hits
WHERE action='application.start' AND created_at > NOW()-INTERVAL 1 YEAR
GROUP BY HOUR(created_at)
)hits
GROUP BY duree
Par contre en effet, diviser le count par le nombre de jours serait une solution plus simple, je vais voir pour faire ça.
Zazou > Je te donne directement le jeu de données bidon que j'utilise. Attention, c'est lourd :
Note que COUNT(action='application.start') ne veut rien dire, mets count(*) dans ton cas...
Note aussi que ton avg() ne sert à rien puisque la sous-requête retourne 1 valeur pour chaque heure, donc à la sortie tu as toujours le count().
Moyenne par jour sur un temps donné
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !
Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !