Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 21h19   #1
Invité de passage
 
Développeur décisionnel
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Localisation : Canada

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Grouper par rapport à un interval

Bonjour à tous,
j' ai problème dont je n' arrive pas à trouver la solution avec MySQL. Je me tourne vers vous pour de l' aide.

J' ai une table user_session(session_id, account_id, time_start, time_end). Je cherche à compter le nombre de user qui se sont loggés une fois au cours d' une periode de 30 jours pour les 90 derniers jours. J' aimerais avoir un resultat comme celui-ci:

Jour Nombre de users
2011-12-06 1002 (nombre de user du 06/12 au 05/11)
2011-12-05 1005 (nombre de user du 05/12 au 04/11)
.
.
. ainsi de suite ppour les 90 derniers jours à compter de la date courante.

Merci pour vos suggestions
bosskat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 14h12   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Citation:
qui se sont loggés une fois au cours d' une periode de 30 jours
Au moins une fois ou une seule fois ?

Si tu veux tous les 90 derniers jours, il te faudrait une table des jours car tu peux potentiellement avoir des jours sans connexion.

EDIT :
Soit avec la table des jours suivante :
jour (jr_date)
Et bien entendu remplie d'au moins les 90 derniers jours, tu peux essayer la requête suivante :
Code :
1
2
3
4
5
SELECT jour j,
	COUNT(DISTINCT account_id) AS nombre_users
FROM jour j
LEFT OUTER JOIN user_session u ON DATE_FORMAT(u.time_start, '%Y-%m-%d') BETWEEN DATE_SUB(j.jr_date, INTERVAL 30 DAY) AND j.jr_date
WHERE j.jr_date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY) AND DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 19h08   #3
Invité de passage
 
Développeur décisionnel
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Localisation : Canada

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Exécution de la requête interminable

Bonjour Cinephil,

merci pour la suggestion

Un autre problème se pose malheureusement. Ma table user_session a plus de 30 millions d' entrées. L' exécution de la requête est interminable. Comment l' optimiser.
Merci
Citation:
Envoyé par CinePhil Voir le message
Au moins une fois ou une seule fois ?

Si tu veux tous les 90 derniers jours, il te faudrait une table des jours car tu peux potentiellement avoir des jours sans connexion.

EDIT :
Soit avec la table des jours suivante :
jour (jr_date)
Et bien entendu remplie d'au moins les 90 derniers jours, tu peux essayer la requête suivante :
Code :
1
2
3
4
5
SELECT jour j,
	COUNT(DISTINCT account_id) AS nombre_users
FROM jour j
LEFT OUTER JOIN user_session u ON DATE_FORMAT(u.time_start, '%Y-%m-%d') BETWEEN DATE_SUB(j.jr_date, INTERVAL 30 DAY) AND j.jr_date
WHERE j.jr_date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY) AND DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
bosskat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h01.


 
 
 
 
Partenaires

Hébergement Web