|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
Bonjour à tous, j'ai un problème de réflexion: j'ai des soucis pour faire une requête
Je suis sous Firebird et j'ai une table qui contient les champs d'occupation. dateDebutOccupation, duree, Emplacement, Occupation (m²)... Je vous explique la situation: je gère des occupations de surfaces, le but de ma requete serait d'avoir l'occupation totale à une date donnée puis ensuite entre 2 dates. J'ai fait un petit dessin pour être clair: ![]() les flèches vertes sont les occupations (avec la surface occupée), A et B sont les dates qui définissent l'intervalle de temps, p1 à p6 sont les dates où l'occupation totale doit être calculée. Mon idée est que pour avoir la surface maximale occupée entre les dates A et B, il faut que je fasse la somme des occupations de chacune des dates p1 à p6 + celles de A et B et prendre la somme la plus grande. J'ai déja les requetes pour ne sélectionner que les dates entre A et B mais je ne vois pas comment mixer le tout pour avoir ma selection du max de mes sommes. ![]() J'espere que tout est clair Code : [LEFT]SELECT dateDebutOccupation FROM Occupations WHERE dateDebutOccupation >=A ANDdateDebutOccupation <B[/LEFT] Code : [LEFT]SELECT (dateDebutOccupation+duree) FROM Occupations WHERE (dateDebutOccupation+duree)>A AND(dateDebutOccupation+duree)<B[/LEFT] Voilà si vous avez des questions ou des idées... toute aide est la bienvenue car je suis pas loin de la pendaison Merci |
|
|
00
|
|
|
#2 | ||
|
Membre régulier
![]() Inscription : octobre 2005 Messages : 92 ![]() |
Bonjour,
Je ne comprend pas bien tes requêtes par rapport à ce que tu cherche... Occupation totale à une date donnée : Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
La requête que tu as ecrit est celle pour une date donnée. Elle correspond a celle que j'ai hormis un >=.
Code :
L'exercice étant d'arriver à faire l'ensemble en une seule requête .
|
||
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
La requête qui remonte les dates retourne p1 à p6.
la requête qui donne l'occupation doit remonter l'ensemble des enregistrements: A: 250 m² p1: 200 m² p2: 300 m² p3: 250 m² p4: 150 m² p5: 180 m² p6: 100 m² B: 100 m² l'occupation à la date B n'est pas nécessaire car elle correspond à l'occuption p6. il faut que la requête me remonte 300 m². |
|
|
00
|
|
|
#5 | ||
|
Inactif
Inscription : décembre 2003 Messages : 1 946 ![]() |
La requête ci-dessous est testée sous ORACLE :
Date de début = 15/01/2005 Date de Fin = 10/06/2005 Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
Merci de vous être penché sur la question je vais tester sous firebird. Je ne suis pas sûr qu'il accepte une sous-requête dans un inner join, je vous tiens au courant.
![]() ![]()
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
FireBird 1.5.3 n'accepte pas le select dans la clause from
Y a-t-il un moyen de faire passer le prédicat dans la clause where ? On est pas loin. Il faut aussi que je regarde un équivalent à from dual. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
En même temps, si vous postiez dans le forum Firebird, vous auriez plus de réponses !
Je déplace.
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
|
|
#9 | |
|
Membre confirmé
![]() Olivier MuetResponsable de service informatique Inscription : septembre 2003 Messages : 222 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
merci, je me doutais bien que c'était rdb$database.
Est il possible de mettre un select dans la clause "from" ? si non, la version firebird 2.0 corrige-t-elle ce manque ? comment pouvoir réecrire la requête faite sous Oracle afin qu'elle fonctionne sous firebird? |
|
|
00
|
|
|
#11 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
|
|
|
00
|
|
|
#12 | |||||
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
vite fait comme ça tu fait une procédure stockée qui ramène les bornes (en fait l'équivalent du select qui est dans le from dans la version oracle puis ensuite tu fait ta requête qui ramène ta surface ce qui donne : Code :
Code :
|
|||||
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
merci, j'essai ca tout de suite et je vous tiens au courant
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
apres installation de firebird2, la requete faite sur le modèle d'oracle fonctionne sauf le max.
(Invalid token. Dynamic SQL Error. SQL error code = -104. Nested aggregate functions are not allowed.) la requête utilisant le procedure stockée fonctionne aussi. je n'ai pas l'occupation pour la date de début et le max ne passe pas non plus. |
|
|
00
|
|
|
#15 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
et s'il te manque la date du début, modifie la procédure stockée pour l'inclure, je l'ai fait vite fait sur le gaz, mais tu as là tous les éléments necessaires. |
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
Merci pour tout. cela fonctionne très bien.
|
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
J'ai encore un problème
La procédure stoquée me remonte bien les dates où il y a un changement d'occupation, dont la dernière date ou l'occupation passe à 0 mais dans la requête, je n'ai pas la date d'occupation avec une surface à null. (j'ai mis un right outer join sans grand succes) |
|
|
00
|
|
|
#18 | ||||
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
oups je me suis trompé de requête
Code :
Code :
|
||||
|
|
00
|
|
|
#19 |
|
Membre du Club
![]() Inscription : septembre 2002 Messages : 144 ![]() |
J'ai trouvé une solution de secours avec vos réponses. En fait je fais une requête qui me ramène toutes les dates pertinentes puis pour chaque date je vais chercher en base l'occupation. Pas top pour l'accès au SGBD
à tous.P.S: Je mets pas le sujet en résolu car je cherche encore quelques suggestions. Je repasserais régulièrement. |
|
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
je n'en vois pas l'intérêt au vu de ta demande
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com