|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Salut à tous,
J'ai un soucis d'optimisation de requête. J'ai 3 tables : Code :
Ce que je souhaite, c'est afficher la liste des articles avec, pour chacun d'eux, le délai de livraison (Delai) correspondant à la commande la plus ancienne (Date). Pour le moment, la seule façon d'aboutir à ce résultat est la requête suivante : Code :
J'aimerai donc utiliser des jointures plutôt qu'une sous requête, mais je ne sais pas comment adapter cela... Quelqu'un a une idée ? Merci
|
||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonjour windmastr26,
est-ce que c'est mieux avec: Code sql :
|
||
|
00
|
|
|
#3 |
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Hélas non, l'exécution n'est pas plus rapide... Je pense que c'est la sous requête qui alourdi considérablement le tout. Mais dans ce cas présent comment s'en passer ,
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
je m'en doutais un peu
On essaye avec une sous-requête enregistrée nommée SR: ajouter la table LigneCdeFournisseur, faire un groupement sur codearticle et une opération Min sur DateDocument, avec un critère LigneSoldee=0. la sous-requête SR renvoit la DateDocument la plus ancienne par codearticle dans tes lignes de commande. Puis la requête principale avec les jointures: LigneCdeFournisseur=====SR (jointure double sur les codes et les dates) compléter avec les jointures LigneCdeFournisseur-----Article puis LigneCdFournisseur-----EnteteCdeFournisseur faire glisser les champs souhaités et ça devrait aller si j'ai rien oublié |
|
00
|
|
|
#5 |
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Une sous-requête enregistrée c'est une requête que je dois au préalable créer sous Access ?
Le problème c'est que l'application qui exécute la requête n'a que des droits de lecture sur la base Access (et oui ! Tant qu'à faire compliqué...). |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
Arghhh ! Tu veux dire qu’il faut rédiger la requête avec du gros SQL bien dégueu#@*&
![]() Code sql :
Bon, je suis sûr de rien là…et une aspro pour f-leb |
||
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
__________________
- De quelque manière qu'on s'y prenne on s'y prend toujours mal - -Sigmund Freud- Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL Tous les cours Office
|
|
|
|
00
|
|
|
#8 | |
![]() ![]() Denis Développeur informatique Inscription : août 2004 Messages : 3 205 ![]() |
Citation:
![]() Allez windmastr26 tu es toujours le bienvenu parmi nous
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp. Bon développement ! Mes tutoriels et contributions sur ma page perso: Ma page personnelle |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Coté requête il ne me donne que les articles ayant fait l'objet d'une commande lol. Donc si l'article n'est pas en cours de commande il n'apparait pas. Mais cette requête me donne d'autres idées que je vais essayer de tester. Je mettrais la requête finale si jamais je parviens à trouver. Un grand merci en tout cas |
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
C’est vrai que SELECT, INNER JOIN, GROUP BY et tout ça c’est vraiment très sale…
Par contre, j’aime bien m’y vautrer quand même… grouik grouiiiiiik ![]() Citation:
Code sql :
|
|||
|
00
|
|
|
#11 |
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Pas encore ça non. Certains articles ont des commandes en court mais n'apparaissent pourtant pas.
Mais je vais me replonger dedans avec les morceaux de requête que tu as rajouté. Je finirai bien par trouver. Merci encore |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
je ne sais pas si ça vient de là mais dans ta requête initiale:
Code sql :
...,(SELECT TOP 1 ... ORDER BY DateDocument DESC) AS Delai... est en contradiction avec: Citation:
Code sql :
...,(SELECT TOP 1 ... Order by DateDocument asc) as Delai... d'où peut-être la différence obtenu avec mon: Code sql :
SELECT codearticle,MIN(datedocument) AS mindedatedocument... EDIT: même si elle n'est pas encore tout à fait au point, est-ce que la requête est quand même plus rapide ? |
|
|
00
|
|
|
#13 | ||
|
Membre du Club
![]() Développeur informatique Inscription : juillet 2009 Messages : 176 ![]() |
Bonjour à tous.
Désolé pour la réponse tardive. A ce jour, voici la requête qui fonctionne et donne, à mon goût, un temps de réponse très satisfaisant (testé sur une base de 14 000 articles et 33 000 commandes) : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com