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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain Montfranc
Le #25252222
olive a émis l'idée suivante :
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



Faire un group by sur l'extraction de l'heure depuis le champ time ?
Ph. B.
Le #25252282
olive a écrit :
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.



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.
Alain Montfranc
Le #25252452
Dans son message précédent, Ph. B. a écrit :
olive a écrit :
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.



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... ;-)



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
oloc
Le #25252582
On 28 fév, 10:52, Alain Montfranc
Bonjour,

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;



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
oloc
Le #25252572
On 28 fév, 09:02, "Ph. B." wrote:

Bonjour,

En introduisant la période, je pense qu'on peut le faire :



(...)

ça fonctionne parfaitement, merci beaucoup.

--
Olivier
Ph. B.
Le #25252562
Alain Montfranc a écrit :
Dans son message précédent, Ph. B. a écrit :
olive a écrit :
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.



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... ;-)



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



Je suis bien d'accord pour l'union, mais sans le order by, on ne répond
pas à la question initiale... :-P
--
Philippe.
Patrick V
Le #25252612
Le 28/02/2013 11:47, a écrit :
select extract(hour from heure_de_pret), count(*)
from table_des_prets
group by 1 order by 1;



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.



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/
olive
Le #25255272
Patrick V wrote:

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');



J'ai essayé ça : pas de message d'erreur, mais la console reste vide, à
l'exception d'un # en haut à gauche. Etrange.

--
Olivier
Patrick V
Le #25260912
Le 01/03/2013 14:22, olive a écrit :
J'ai essayé ça : pas de message d'erreur, mais la console reste vide, à
l'exception d'un # en haut à gauche. Etrange.



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/
Publicité
Poster une réponse
Anonyme