Acces : Group By 15Min

Acces : Group By 15Min - VB/VBA/VBS - Programmation

Marsh Posté le 19-06-2007 à 10:03:07    

Bonjour,
 
J'ai une table dont le contenu ressemble à ça :
 
TSTAMP                            ID                GROUP
10/07/2006 08:02:31 527526     Groupe1
10/07/2006 08:03:34 527527     Groupe2
10/07/2006 08:07:05 527530     Groupe1
 
 
J'aimerais compter le nombre d'occurence de groupe toutes les 15 minutes. Je sais le faire par heure, jour ou mois avec les foontions PartDate appliqués sur TSTAMP mais comment le fair toutes le 15 minutes.
Le résultat devrait ressembler à ca :
 
 
10/07/2006 08:00:00              2
10/07/2006 08:15:00              4
 
etc...
 
 
Merci pour vos éventuelles pistes


Message édité par 86bavaria le 19-06-2007 à 10:03:23
Reply

Marsh Posté le 19-06-2007 à 10:03:07   

Reply

Marsh Posté le 19-06-2007 à 10:08:09    

un truc du style  
select count where heure between adddate(now,0,'m') and adddate(now,15,'m')  
?

Reply

Marsh Posté le 19-06-2007 à 10:34:21    

Première étape : il faut transformer pour chaque enregistrement l'heure réelle en quart d'heure (champ calculé).
Ça se fait avec l'aide de la formule suivante
(CInt(format$("10/07/2006 08:45:00", "nn" )) \ 15) * 15
Cette formule renvoie 0, 15, 30 et 45 en fonction de l'heure réelle.
Cela te permettra de créer un autre champ calculé avec la nouvelle heure répartie par quart (reprendre la date et remplacer les minutes par le résultat trouvé et les secondes par 00).

 

Sur ce dernier champ tu pourras faire un GROUP BY et ton COUNT fonctionnera.
En théorie. Je crois, À vérifier :)

Message cité 1 fois
Message édité par tegu le 19-06-2007 à 10:35:25
Reply

Marsh Posté le 19-06-2007 à 10:51:24    

tegu a écrit :

Première étape : il faut transformer pour chaque enregistrement l'heure réelle en quart d'heure (champ calculé).
Ça se fait avec l'aide de la formule suivante
(CInt(format$("10/07/2006 08:45:00", "nn" )) \ 15) * 15
Cette formule renvoie 0, 15, 30 et 45 en fonction de l'heure réelle.
Cela te permettra de créer un autre champ calculé avec la nouvelle heure répartie par quart (reprendre la date et remplacer les minutes par le résultat trouvé et les secondes par 00).
 
Sur ce dernier champ tu pourras faire un GROUP BY et ton COUNT fonctionnera.
En théorie. Je crois, À vérifier :)


 
Yess je vois bien le principe. J'y connais rien au VBA Access mais je vais tenter ma chance et je reviendrai vers vous le cas echéant.
Si je comprend bien je met le résultat de ma requête dans un nouvelle table dans laquelle j'ajoute une nouvelle colonne avec ta formule puis je fais un group by sur l'heure puis le quart d'heure ?


Message édité par 86bavaria le 19-06-2007 à 10:51:45
Reply

Marsh Posté le 19-06-2007 à 13:08:43    

Non, tu peux créer des champs calculés implicitement dans tes requetes à l'aide de formules de calcul et d'un alias de champ (nom du champ) :

 

SELECT A.champ1, A.champ2, CInt(Format$(...) As ChampCalcul FROM A...

 

Si tu ouvres un recordset sur cette requete, tu auras un champ nommé ChampCalcul directement exploitable.

 

edit: il faut que ton group by porte sur la date et l'heure (modifiée) pour garder un tri correct, à moins que tu ne veuilles regrouper les « 8h15 » de n'importe quel jour écoulé.

Message cité 1 fois
Message édité par tegu le 19-06-2007 à 13:11:17
Reply

Marsh Posté le 19-06-2007 à 15:38:26    

tegu a écrit :

Non, tu peux créer des champs calculés implicitement dans tes requetes à l'aide de formules de calcul et d'un alias de champ (nom du champ) :
 
SELECT A.champ1, A.champ2, CInt(Format$(...) As ChampCalcul FROM A...
 
Si tu ouvres un recordset sur cette requete, tu auras un champ nommé ChampCalcul directement exploitable.
 
edit: il faut que ton group by porte sur la date et l'heure (modifiée) pour garder un tri correct, à moins que tu ne veuilles regrouper les « 8h15 » de n'importe quel jour écoulé.


En effet je m'en suis sorti avec :
 

Code :
  1. SELECT Format$(dbo_ACDGROUP.TSTAMP,"hh" ) AS Heure, Fix(Format$(dbo_ACDGROUP.TSTAMP,"nn" )/15)*15 AS [Quart heure], Count(*)


 
Le but étant tous jours confondus de compter les appels reçus par heure et par quart d'heure
 
Merci encore
 
 
Edit : ici la fonction "fix" est plus appropriée, en effet à 55min "cint" arrondira à 4 (car 55 / 15 = 3.6) en non à 3.


Message édité par 86bavaria le 19-06-2007 à 15:41:38
Reply

Marsh Posté le 19-06-2007 à 16:50:22    

Je n'ai pas écris 55 / 15, mais 55 \ 15
Ça n'était pas une faute de frappe mais un opérateur VB qui fait la division et ne garde que la partie entière du résultat :)

Reply

Marsh Posté le 19-06-2007 à 16:52:37    

tegu a écrit :

Je n'ai pas écris 55 / 15, mais 55 \ 15
Ça n'était pas une faute de frappe mais un opérateur VB qui fait la division et ne garde que la partie entière du résultat :)


 
ouye je n'avais pas vu. Bé merci encore  :jap:  :jap:


Message édité par 86bavaria le 19-06-2007 à 16:52:43
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed