bluedemon
Messages postés9Date d'inscriptionlundi 13 octobre 2008StatutMembreDernière intervention16 décembre 2013
-
Modifié par bluedemon le 6/12/2013 à 11:20
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDerniè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).
bluedemon
Messages postés9Date d'inscriptionlundi 13 octobre 2008StatutMembreDernière intervention16 décembre 20131 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 :-)
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 16 déc. 2013 à 11:31
ok c'est cool ;) du coup si tu peux passer le sujet en résolut =)
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 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
bluedemon
Messages postés9Date d'inscriptionlundi 13 octobre 2008StatutMembreDernière intervention16 décembre 20131 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 :-/
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 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
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 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
bluedemon
Messages postés9Date d'inscriptionlundi 13 octobre 2008StatutMembreDernière intervention16 décembre 20131 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)
nagaD.scar
Messages postés4272Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202317 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?)
16 déc. 2013 à 11:31
bon dev.
naga