Besoin de récupérer un resultat sur une perdiode

bluedemon Messages postés 9 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 16 décembre 2013 - Modifié par bluedemon le 6/12/2013 à 11:20
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 16 déc. 2013 à 11:31
Bonjour,
Je dois réaliser une requête assez compliquée.
Je dois sélectionner un nombre de personnes inscrites sur une période sachant qu'une journée commence à 7h et se fini le lendemain à 7h.

Je m'explique. Par exemple du 1er au 30 septembre récupérer le nombre d'inscrit par jour (journée commençant à 7h et finissant le lendemain à 7h). Afficher le résultat avec la date de début de journée ( par exemple la journée commence le 2 à 7h et fini le 3 à 7h, afficher le résultat avec comme date le 2).

Un grand merci d'avance.

2 réponses

bluedemon Messages postés 9 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 16 décembre 2013 1
16 déc. 2013 à 10:11
Bonjour.
Et bien après quelques jours de recherche et l'aide de mon frangin, j'ai pu établir la requête.
Tout d'abord il faut créer une table calendar ( requete SQL disponible sur le net)
Puis nous utilisons cette table en sous requête pour avoir ce résultât :

select count(userID), date  from user,
(
	select 
	ADDDATE(CAST(dt AS DATETIME), INTERVAL nb_hour HOUR) as date 
	from calendar 
	where dt between 'DATE1' And 'DATE2'
) 
as subdate
where DateInscrit >= subdate.date 
and DateInscrit < ADDDATE(subdate.date, INTERVAL 1 day)
group by date asc


Et voila :-)


PS : Merci à naga pour ses réponses :-)
1
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
16 déc. 2013 à 11:31
ok c'est cool ;) du coup si tu peux passer le sujet en résolut =)

bon dev.
naga
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 déc. 2013 à 13:39
salut,

tu peux utiliser la fonction 'between' si tu veux travailler sur un type date, je pense que ca te suffira.
T syntaxe sera ;


Between '2013-01-01 07:00:00' And '2013-01-02 02:00:00'
(j'ai juste un doute sur la position du mois et du jour)

naga
0
bluedemon Messages postés 9 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 16 décembre 2013 1
6 déc. 2013 à 13:46
Merci beaucoup pour pour ta réponse. Mais au final tu auras deux dates alors qu'il me faut une seule date.
Par exemple : il y a 30 inscrits entre le 01/09/2013 07:00:00 et le 02/09/2013 07:00:00. En résultat je dois avoir :
30 inscrits le 01/09/2013 et c'est la que cela ce corse :-/
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 déc. 2013 à 14:25
non il n'y a rien de compliqué en fait.

Le between te permettra de récupérer ce qui faut entre 7h et 7h le lendemain, mais dans ton select, il te suffit de ne pas récupérer la date et indiquer celle que tu souhaites ... par exemple :

 

select VARIABLES ,
'2013-01-01 12:00:00' as LaDateQueJafficherai
from maTable
where laDate Between '2013-01-01 07:00:00' And '2013-01-02 02:00:00'


'as' voulant dire que la variable qu'il y a avant aura comme nom la chaine qu'il y a après.

Si tu ne veux pas récupérer la date, ca ne t'empêche pas d'appliquer un filtre sur cette date => bien souvent on va effectuer des jointures sur les identifiant, mais on ne les conserve que rarement dans le résultat affiché


naga
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 déc. 2013 à 14:27
mmmh ca aurai été plus simple comme exemple pour toi :




select count(*),
'2013-01-01 12:00:00' as LaDateQueJafficherai
from maTable
where laDate Between '2013-01-01 07:00:00' And '2013-01-02 02:00:00'


ce qu'on récupère sera :
dans la première colonne le nombre de résultats (dans ton cas le nombre d'inscrit donc)
dans la seconde colonne, la date que tu aura écris (et d'ailleurs, elle peu être écrite ici, mais elle peu tout aussi bien n'être écrite qu'à l'affichage).

naga
0
bluedemon Messages postés 9 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 16 décembre 2013 1
6 déc. 2013 à 15:17
Oui cela aurait été aussi facile si ce n'est que la période est indéfini (1 semaines, 1 mois, un an, etc...) Je ne peux pas mettre en dure une date.

Voila ce que je dois faire :

select count(*), LaDateQueJeSouhaite

from maTable
where laDate Between '2013-01-01 07:00:00' And '2013-01-31 06:59:59'


LaDateQueJeSouhaite doit correspondre à la date à laquelle la journée est considérée commencer et cela sur toute la période demandée :
2013-01-01 - 20 (journée commençant le 2013-01-01 à 07:00:00 et finissant le 2013-01-02 06:59:59)
2013-01-02 - 10 (journée commençant le 2013-01-02 à 07:00:00 et finissant le 2013-01-03 06:59:59)
2013-01-03 - 40 (journée commençant le 2013-01-03 à 07:00:00 et finissant le 2013-01-04 06:59:59)
2013-01-04 - 50 (journée commençant le 2013-01-04 à 07:00:00 et finissant le 2013-01-05 06:59:59)
....
2013-01-31 - 20 (journée commençant le 2013-01-31 à 07:00:00 et finissant le 2013-02-01 06:59:59)
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 déc. 2013 à 15:41
en fait ce qu'il me manque c'est le pourquoi de la requête => que demande l'utilisateur ? il saisi une date ? ou alors c'est genre "afficher les statistiques" et il y a tous les jours avec le nombre d'enregistrement ?

Et ensuite, quel est le langage que tu utilise ? (tu requête en sql, mais tu semble faire une application ? dans quelle langage elle est dev?)
0
Rejoignez-nous