Aide pour une requete "nombre de connexion par tranche horaire" - SQL/NoSQL - Programmation
Marsh Posté le 17-06-2003 à 11:45:01
Salut!
J'ai pas testé pour savoir si ça marche mais il doit falloir écrire un truc du style suivant :
SELECT [Nbre de log]
FROM Ticket_incident
WHERE [Heure] BETWEEN Heure de debut AND Heure de fin;
Apres je sais pas avec quoi tu travailles mais tu peux peut etre
faire une loop et incrementer les variables Heure de debut et de fin de 2 à chaque fois...
@+
Seb
Marsh Posté le 17-06-2003 à 12:00:34
Cette requette est fait dans une page asp (connexion sous oracle)
et biensur le résultat est mis dans un tableau
C'est ce que je pensais faire mais je dois faire une requete par tranche horaire alors ??
Marsh Posté le 17-06-2003 à 13:17:32
Il existe peut être un moyen de faire ça avec une seule requête mais je vois pas comment se serait possible
En tout cas si tu trouves la solution ça m'interesse
bon courage
sinsé
Marsh Posté le 17-06-2003 à 13:43:32
C dépend des fonctions de manipulation d'heure qui sont disponibles.
Si tu en as une qui te permet d'extraire l'heure, je pense que tu pourras écrire : GROUP BY (HOUR(heure) / 2)
Marsh Posté le 17-06-2003 à 14:05:23
Bon j'ai pas d'Oracle sous la main, mais ...
... mais si tu arrives à trouver une fonction
qui arrondi les heures 13H30 -> 13H appelons là ARROND
alors avec un truc comme ça j'y arriverai ...
select madate, sum (decode((ARROND(monheure) MOD 2) * 2,0,1,0),
sum (decode((ARROND(monheure) MOD 2) * 2,2,1,0),
sum (decode((ARROND(monheure) MOD 2) * 2,4,1,0),
...
sum (decode((ARROND(monheure) MOD 2) * 2,22,1,0)
from matable
group by madate
ex : 17H30 => ARROND(17H30) => 17H
17H MOD 2 => 8
8 * 2 => 16
sum (decode((ARROND(monheure) MOD 2) * 2,16,1,0) => +1 sur
le creneau 16-18H
Bon c juste une idée en passant
Marsh Posté le 17-06-2003 à 15:29:21
Salut vttman2,
elle correspond à quoi ta fonction decode ?
Marsh Posté le 17-06-2003 à 15:43:57
-BigFoot- a écrit : Salut vttman2, |
benh le decode c une instruction Oracle style
decode(monchamp, 15,'quinze',16,'seize','?')
Dans cet exemple
si monchamp contient le valeur 15 l'instruction
decode renvoit 'quinze'
si monchamp contient le valeur 16 l'instruction
decode renvoit 'seize'
Sinon elle renvoit '?'
Marsh Posté le 17-06-2003 à 16:00:01
Essaye cela:
SELECT JOUR,
SUM(A),
SUM(B),
SUM(C),
SUM(D),
SUM(E),
SUM(F),
SUM(G),
SUM(H),
SUM(I),
SUM(J),
SUM(K),
SUM(L)
FROM (SELECT JOUR,
DECODE(TRANCHE,0,SUM(TOTAL)) A,
DECODE(TRANCHE,2,SUM(TOTAL)) B,
DECODE(TRANCHE,4,SUM(TOTAL)) C,
DECODE(TRANCHE,6,SUM(TOTAL)) D,
DECODE(TRANCHE,8,SUM(TOTAL)) E,
DECODE(TRANCHE,10,SUM(TOTAL)) F,
DECODE(TRANCHE,12,SUM(TOTAL)) G,
DECODE(TRANCHE,14,SUM(TOTAL)) H,
DECODE(TRANCHE,16,SUM(TOTAL)) I,
DECODE(TRANCHE,18,SUM(TOTAL)) J,
DECODE(TRANCHE,20,SUM(TOTAL)) K,
DECODE(TRANCHE,22,SUM(TOTAL)) L
FROM (SELECT TO_CHAR(LADATEHEURE,'DD/MM') JOUR,
TRUNC(TO_CHAR(LADATEHEURE,'HH24')/2)*2 TRANCHE,
COUNT(*) TOTAL
FROM TABLELOG
GROUP BY TO_CHAR(LADATEHEURE,'DD/MM'),
TRUNC(TO_CHAR(LADATEHEURE,'HH24')/2)*2)
GROUP BY JOUR, TRANCHE)
GROUP BY JOUR;
Les colonnes A à L correspondant aux tranches de la journée par 2 heures (12 tranches donc).
Marsh Posté le 17-06-2003 à 16:48:18
Merci pour votre aide à tous et en particulier à Agagax
J'ai essayé ta solution et c'est exactement ce que je veux
Marsh Posté le 17-06-2003 à 20:28:55
J'ai le droit de vomir ?
Bon, en bref, vouloir ramener ça en plusieurs colonnes est pas bien malin, puisque les deux axes sont dérivés de la même variable. Il n'y a donc qu'une colonne à retourner, et la requête est un peu plus claire :
select sum(cnx_id), to_char(round(to_number(to_char(cnx_dte, 'HH24')) / 2), 0) * 2) || 'h00-' || to_char(round(to_number(to_char(cnx_dte, 'HH24')) / 2) + 1, 0) * 2) || 'h00', to_char(dte_cnx, 'DD/MM/YYYY') |
Simple comme choux.
Marsh Posté le 18-06-2003 à 11:09:42
MagicBuzz a écrit : J'ai le droit de vomir ?
|
Marsh Posté le 18-06-2003 à 11:12:11
Bah c'est la mise en forme au format des heures qui est longue, la requête elle-même est toute petite
Marsh Posté le 18-06-2003 à 15:02:28
MagicBuzz a écrit : J'ai le droit de vomir ?
|
Sérieusement, à quoi va lui servir ton post ?
Premièrement, tu ne réponds pas à sa question qui est d'afficher les comptages sur plusieurs colonnes correspondant aux plages horaires d'une journée pour ensuite l'inclure dans un tableau dimensionné à cet effet.
S'il avait voulu le faire sur une colonne, je pense qu'il n'aurait pas eu besoin de poster ici...
Deuxièmement, ta requête est incorrecte.
Que vas tu obtenir un sum(cnx_id), hein ? il s'agit d'un comptage du nombre de lignes !
De plus il y a une coquille dans la syntaxe de ta deuxième colonne.
Quant à la clarté de la présentation de ta requête, je laisse le soin aux lecteurs de juger.
Troisièmement, ce que j'ai écrit n'est qu'une façon de faire. Il y en a probablement d'autres.
La requête peut être optimisée. J'aurais pu aussi nommer clairement les colonnes par "00h00-02h00"...
On pourrait aussi très bien utiliser du PL, etc...
Enfin pour conclure, continue à vomir sur ceux qui prennent le temps de répondre à ceux qui cherchent de l'aide...
J'apprécie de venir sur ce forum mais je n'ai pas beaucoup le temps de lire et d'intervenir, et ce n'est pas ce genre de comportement puéril qui va m'inciter à le faire plus souvent.
Ni moi, ni ceux qui sont de passage sur ce forum.
Marsh Posté le 18-06-2003 à 15:18:51
Très franchement, y'a beaucoup de gens qui utilisent le sgbd pour faire la mise en page ?
C'est pas le boulot du sgbd, donc la répartition en autant de colonnes qu'il y a de tranches horraire, très franchemement je le laisse à l'appli de reporting qui bosse à partir de la requête...
Deplus, ouais, j'ai laissé deux coquilles. Désolé de pas avoir oracle chez moi.
Et je ne vois pas ce qu'il y a de mal à présenter une autre solution (ma requête est deplus extrêment plus simple, et bien plus propre).
Pour finir, je te laisse la réécrire de façon plus sexy, perso je vois pas comment la rendre plus sexy, j'y peut rien si à cause de la présentation la déclaration du champ fait deux lignes... C'est peut-être aussi pour ça que je bosse toujours sur 21", pour pas être emmerdé avec des retours à la ligne en cas de requêtes complexes...
Marsh Posté le 17-06-2003 à 11:15:27
Salut,
j'explique mon problème
J'ai une table de logs (à chaque fois qu'un utilisateur se connecte à une certaine application, la table est renseignée avec son nom de login avec la date et heure)
J'aimerais faire une requete qui liste par tranche horaire de deux heures le nombre de connexion qui ont lieu par exemple :
date | 00h00-02h00 | 02h00-04h00 | 04h00-06h00 | ....
16/06 5 8 3 8
17/06 4 9 7 4
Mais j'ai aucune idée de la requête ???
Ou avez vous une astuce ??
Merci de votre aide