Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1334 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] tranches horaires

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] tranches horaires

n°1906855
vonm
Posté le 20-07-2009 à 15:40:59  profilanswer
 

Bonjour,
 
Je dispose d'une requete qui me donne une liste d'operation effectuées avec l'horodatage de ces operations.
Je souhaiterais presenter ces informations sous la forme de nombre d'operations par tranche horaire  
 
par exemple :
ma requete me renvoit :
Site; date; heure; nb_operations
Site1; 02/05/09; 15:59:00; 15
Site 2; 02/05/09;17:44:00;22
etc...
 
je souhaiterais presenter les donnees sous la forme d'un tableau croise :
Site;tranche1(15:30:00-15:59:59), tranche2(16:00:00-16:29:59);...
Site1;15;0;0;0;...
Site2;0;0;0;0;...;22;0;...
 
A priori, il semblerait qu'il faille utiliser un pivot, mais j'avoue que je ne vois pas bien comment gerer ca et surtout comment gerer les tranches horaires.
 
Merci d'avance pour toutes vos suggestions.
 
v.

mood
Publicité
Posté le 20-07-2009 à 15:40:59  profilanswer
 

n°1906859
skeye
Posté le 20-07-2009 à 15:47:14  profilanswer
 

Il y a un autre langage derrière, ou il te faut forcément du 100% SQL?


Message édité par skeye le 20-07-2009 à 15:47:44

---------------
Can't buy what I want because it's free -
n°1906860
vonm
Posté le 20-07-2009 à 15:49:16  profilanswer
 

he bien, je suis en train de chercher une solution pour le faire en 100% sql mais comme ca me gonfle, il ya des chances que je fasse cela en code.
 
J'avoue toutefois que je preferais une solution SQL.
 
v.

n°1906861
skeye
Posté le 20-07-2009 à 15:50:08  profilanswer
 

Tu connais les tranches horaires à l'avance? Si oui tu as toujours la solution de la grosse union moche [:joce]


---------------
Can't buy what I want because it's free -
n°1906862
vonm
Posté le 20-07-2009 à 15:54:58  profilanswer
 

les tranches horaires sont les heures de la journee d'exploitation decoupee par tranche de 10 minutes.
Idealement, je souhaiterais donc du 5h-21h, mais bien evidemment, je peux me contenter de la journee complete si ca semble plus simple.
 
v.

n°1906871
skeye
Posté le 20-07-2009 à 16:08:39  profilanswer
 

vonm a écrit :

les tranches horaires sont les heures de la journee d'exploitation decoupee par tranche de 10 minutes.

 

Des tranches de 10 minutes ça doit pouvoir se faire ça par contre en bidouillant un peu... un truc du genre

 

select machin, truc, to_char(madate, 'HH24'), substr(to_char(madate, 'MI'), 0, 1), count(*)
from majolietable
group by machin, truc, to_char(madate, 'HH24'), substr(to_char(madate, 'MI'), 0, 1);

 

non?[:autobot]

Message cité 1 fois
Message édité par skeye le 20-07-2009 à 16:08:59

---------------
Can't buy what I want because it's free -
n°1913084
john clees​e
Posté le 08-08-2009 à 20:41:48  profilanswer
 

skeye a écrit :


 
Des tranches de 10 minutes ça doit pouvoir se faire ça par contre en bidouillant un peu... un truc du genre
 
select machin, truc, to_char(madate, 'HH24'), substr(to_char(madate, 'MI'), 0, 1), count(*)
from majolietable
group by machin, truc, to_char(madate, 'HH24'), substr(to_char(madate, 'MI'), 0, 1);
 
non?[:autobot]


'soir...
 
Je propose :  
 
select ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01', ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01' + 1/144, count(*)
from majolietable
group by ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01', ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01' + 1/144;
 
Mais ici, je ne peux pas tester... Donc à voir. En tout cas, je checkerai ça lundi au boulot, et je corrigerai au besoin...Pour le boulot, j'avais fait la même chose, donc sûr que ça fonctionne comme ça  :)

n°1913363
john clees​e
Posté le 10-08-2009 à 11:57:43  profilanswer
 

john cleese a écrit :


'soir...

 

Je propose :

 

select ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01', ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01' + 1/144, count(*)
from majolietable
group by ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01', ceil((madate-date '-3000-01-01')*144)/144+date '-3000-01-01' + 1/144;

 

Mais ici, je ne peux pas tester... Donc à voir. En tout cas, je checkerai ça lundi au boulot, et je corrigerai au besoin...Pour le boulot, j'avais fait la même chose, donc sûr que ça fonctionne comme ça  :)


Alors, supposons que ta table (nommons-là FRANCOISE) soit de cette forme :
site (varchar2)
date_operation (date ou timestamp)
+ diffèrents champs concernant le détail de l'opération

 

==> ta requête pour obtenir le nb. d'opérations par tranche de 30 minutes serait de la forme :
select site,
       to_char(floor((date_operation-date '-3000-01-01')*48)/48+date '-3000-01-01','HH24:MI:SS') heure_debut,
       to_char(floor((date_operation-date '-3000-01-01')*48)/48+date '-3000-01-01' + 30/1440 - 1/86400,'HH24:MI:SS')   heure_fin,
       count (*)
from FRANCOISE
group by
       site,
       to_char(floor((date_operation-date '-3000-01-01')*48)/48+date '-3000-01-01','HH24:MI:SS'),
       to_char(floor((sysdate-date '-3000-01-01')*48)/48+date '-3000-01-01' + 30/1440 - 1/86400,'HH24:MI:SS');

 


Pour t'en assurer, essaie déjà ceci :
select
       to_char(floor((sysdate-date '-3000-01-01')*48)/48+date '-3000-01-01','HH24:MI:SS') ,
       to_char(floor((sysdate-date '-3000-01-01')*48)/48+date '-3000-01-01' + 30/1440 - 1/86400,'HH24:MI:SS')  
       from dual;


Message édité par john cleese le 26-06-2014 à 17:07:12
n°1969914
john clees​e
Posté le 27-02-2010 à 23:12:00  profilanswer
 

Au fait...
 
De rien !!!

n°2061973
vonm
Posté le 09-03-2011 à 09:45:59  profilanswer
 

Je n'avais pas vu la reponse.
 
Merci !
 
v.

mood
Publicité
Posté le 09-03-2011 à 09:45:59  profilanswer
 

n°2103578
Sorasora
Posté le 27-09-2011 à 17:13:50  profilanswer
 

Désolé de remonter le topic mais j'ai sensiblement le même problème en mySQL
 
Bonjour à tous,
 
je cherche à créer une requête qui sélectionne le nombre d’occurrences de trois activité sur une tranche horaire donnée, et ce sur une journée.
 
Basiquement, voilà comment je récupère les trois activités sur une seule tranche horaire :
 

Code :
  1. SELECT  COUNT(DATEHEURE_VAL_TEC) AS 'VAL_TEC_HORAIRE'
  2. FROM delaitraite
  3. WHERE CHAP='SANG_LOCAL' AND TIME(DATEHEURE_VAL_TEC) BETWEEN '00:00' AND '01:00'
  4. UNION
  5. SELECT  COUNT(DATEHEURE_VAL_BIO) AS 'VAL_BIO_HORAIRE'
  6. FROM delaitraite
  7. WHERE CHAP='SANG_LOCAL' AND TIME(DATEHEURE_VAL_BIO) BETWEEN '00:00' AND '01:00'
  8. UNION
  9. SELECT  COUNT(DATEHEURE_VAL_PVT) AS 'VAL_PVT_HORAIRE'
  10. FROM delaitraite
  11. WHERE CHAP='SANG_LOCAL' AND TIME(DATEHEURE_VAL_PVT) BETWEEN '00:00' AND '01:00'


 
Comme vous pouvez le voir, la requête va être énorme !
De plus, je vais devoir filtrer le tout, c'est à dire quelque chose comme ça :
 

Code :
  1. (
  2. (MES 3 ACTIVITÉS ENTRE 00h et 01h)
  3. UNION
  4. (MES 3 ACTIVITÉS ENTRE 01h et 02h)
  5. UNION
  6. ....
  7. (MES 3 ACTIVITÉS ENTRE 23h et 00h)
  8. )
  9. WHERE Option1=Blablabla AND Option2=Blablabla...etc


 
 
Auriez-vous une solution plus optimale ?

n°2103584
skeye
Posté le 27-09-2011 à 17:28:32  profilanswer
 

Code :
  1. SELECT substring(TIME(DATEHEURE_VAL_TEC), 1, 2) AS 'heure', COUNT(DATEHEURE_VAL_TEC) AS 'VAL_TEC_HORAIRE'
  2. FROM delaitraite
  3. WHERE CHAP='SANG_LOCAL'
  4. GROUP BY substring(TIME(DATEHEURE_VAL_TEC), 1, 2)


:??:


Message édité par skeye le 27-09-2011 à 17:28:51

---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] tranches horaires

 

Sujets relatifs
Comment importer une bdd au format Oracle data pump?probleme de drop de table sur oracle
upload video dans une bdd oracle[ORACLE] Connaitre la date d'ajout d'une colonne
[SGBD/SQL] Date de modification des enregs d'une table Oracle[Oracle & PHP] boucle if dans while : problème
explication procedure oraclepoMMo pour ORACLE ?
[SQL] alias de subquery avec OracleProbleme variable entrante function Oracle
Plus de sujets relatifs à : [Oracle] tranches horaires


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR