Faire apparaître les résultats de requêtes combinées dans l'ordre d'execution
Le
olive

Bonjour,
Mon problème est un peu particulier, je vais tenter de vous l'exposer. Soit
un logiciel de gestion d'une grosse bibliothèque publique, reposant sur une
base Oracle ; je peux faire toutes les requêtes SQL que je souhaite, via une
console intégrée au logiciel, mais je ne peux pas scripter directement sur
la base.
J'ai écrit (via un petit script en python), une requête qui a la forme
suivante :
select count (*) from table_des_prets where heure_de_pret between YYYY/MM/DD
HH:OO:00 and YYYY/MM/DD HH:59:59 UNION select count (*) from table_des_prets
where heure_de_pret between YYYY/MM/DD HH+1:OO:00 and YYYY/MM/DD HH+1:59:59
() UNION count (*) from table_des_prets where heure_de_pret between
YYYY/MM/DD HH+8:OO:00 and YYYY/MM/DD HH+8:59:59.
Le but étant évidemment de connaître le nombre de prêts par heure. Or
lorsque j'execute cette requête, les résultats sont triés par ordre
croissant ou décroissant, ce qui ne m'est d'aucune utilité.
Ce que j'aimerais obtenir : que les résultats apparaissent dans l'ordre où
les requêtes sont exécutées, ou alors un moyen de trier selon l'ordre
croissant des heures de prêt (le champ heure_de_prêt est au format date dans
la base).
Après avoir cherché, je me dis que ce que je demande n'est pas possible,
mais peut-être aurez-vous des idées.
Merci beaucoup.
--
Olivier
--
Olivier
Mon problème est un peu particulier, je vais tenter de vous l'exposer. Soit
un logiciel de gestion d'une grosse bibliothèque publique, reposant sur une
base Oracle ; je peux faire toutes les requêtes SQL que je souhaite, via une
console intégrée au logiciel, mais je ne peux pas scripter directement sur
la base.
J'ai écrit (via un petit script en python), une requête qui a la forme
suivante :
select count (*) from table_des_prets where heure_de_pret between YYYY/MM/DD
HH:OO:00 and YYYY/MM/DD HH:59:59 UNION select count (*) from table_des_prets
where heure_de_pret between YYYY/MM/DD HH+1:OO:00 and YYYY/MM/DD HH+1:59:59
() UNION count (*) from table_des_prets where heure_de_pret between
YYYY/MM/DD HH+8:OO:00 and YYYY/MM/DD HH+8:59:59.
Le but étant évidemment de connaître le nombre de prêts par heure. Or
lorsque j'execute cette requête, les résultats sont triés par ordre
croissant ou décroissant, ce qui ne m'est d'aucune utilité.
Ce que j'aimerais obtenir : que les résultats apparaissent dans l'ordre où
les requêtes sont exécutées, ou alors un moyen de trier selon l'ordre
croissant des heures de prêt (le champ heure_de_prêt est au format date dans
la base).
Après avoir cherché, je me dis que ce que je demande n'est pas possible,
mais peut-être aurez-vous des idées.
Merci beaucoup.
--
Olivier
--
Olivier
Faire un group by sur l'extraction de l'heure depuis le champ time ?
Bonjour,
je penserais à la clause order by plutôt que group by.
En introduisant la période, je pense qu'on peut le faire :
select '1' as horaire, count (*) from table_des_prets
where heure_de_pret between YYYY/MM/DD HH:00:00 and YYYY/MM/DD HH:59:59
UNION
select '2' as horaire, count (*) from table_des_prets
where heure_de_pret between YYYY/MM/DD HH+1:00:00 and YYYY/MM/DD HH+1:59:59
(...)
UNION
select '9' as horaire, count (*) from table_des_prets where
heure_de_pret between YYYY/MM/DD HH+8:00:00 and YYYY/MM/DD HH+8:59:59
order by horaire
Bien sur, le 'n' as horaire peut être affiné en introduisant la date et
la période horaire... ;-)
--
Philippe.
Quel interet de faire 24 requetes avec union alors que le group by le
fait en une seule ?
J'ai pas Oracle mais avec Postgres ca donne un truc du genre :
select extract(hour from heure_de_pret), count(*)
from table_des_prets
group by 1 order by 1;
Rajouter une where clause si nécessaire pour restreindre à un jour
donné (où à une plage temporaire). Pas besoin d'Union
Bonjour,
Une telle syntaxe m'interesserait évidemment beaucoup, mais si j'en
crois ceci :
http://www.techonthenet.com/oracle/functions/extract.php
on ne peut pas extraire l'heure d'un champ au format date. De fait, ça
ne marche pas.
Mais je vous remercie de votre réponse.
Olivier
Bonjour,
(...)
ça fonctionne parfaitement, merci beaucoup.
--
Olivier
Je suis bien d'accord pour l'union, mais sans le order by, on ne répond
pas à la question initiale... :-P
--
Philippe.
Il suffit d'une petite adaptation :
select to_date(trunc(heure_de_pret) ||'
'||to_char(heure_de_pret,'HH24')||':00:00', 'dd/mm/yyyy hh24:mi:ss'),
count(*) from table_des_prets
group by to_date(trunc(heure_de_pret) ||'
'||to_char(heure_de_pret,'HH24')||':00:00', 'dd/mm/yyyy hh24:mi:ss')
order by to_date(trunc(heure_de_pret) ||'
'||to_char(heure_de_pret,'HH24')||':00:00', 'dd/mm/yyyy hh24:mi:ss');
--
http://www.chevaliers4vents.com/
J'ai essayé ça : pas de message d'erreur, mais la console reste vide, à
l'exception d'un # en haut à gauche. Etrange.
--
Olivier
Gni ? Et tu as encore la main ou bien il est en train d'exécuter
péniblement la requête ?
--
http://www.chevaliers4vents.com/