Sous-requête et MAX()
chile
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis confronté à un obstacle que je pensais pouvoir résoudre.
J'ai 2 tables à joindre:
devis_voyages et devis_itineraire_version
Dans 'devis_voyages', j'ai plusieurs voyages et dans 'devis_itineraire_version' j'ai différentes versions de ces voyages.
Je veux lister par conseiller et noté envoyé
La colonne commune est code_circuit
Avec le code ci-dessous, ca fonctionne bien
Mais dans ma liste j'ai toutes les versions de chaque programme. Je ne veux seulement que les dernières versions de chaque programme.
Je rajoute alors une condition dans where pour ne retenir que les dernières versions avec MAX ()
Mais je n'ai pas le résultat voulu. Je n'ai pas les dernières versions et il manque aussi des versions.
Merci pour votre aide et conseils.
Je suis confronté à un obstacle que je pensais pouvoir résoudre.
J'ai 2 tables à joindre:
devis_voyages et devis_itineraire_version
Dans 'devis_voyages', j'ai plusieurs voyages et dans 'devis_itineraire_version' j'ai différentes versions de ces voyages.
Je veux lister par conseiller et noté envoyé
La colonne commune est code_circuit
Avec le code ci-dessous, ca fonctionne bien
SELECT devis_itineraires_versions.code_circuit, devis_itineraires_versions.date, devis_itineraires_versions.date_envoi, devis_itineraires_versions.version, devis_voyages.code_circuit, devis_voyages.code_client, devis_voyages.nom_conseiller FROM devis_itineraires_versions INNER JOIN devis_voyages ON devis_itineraires_versions.code_circuit = devis_voyages.code_circuit WHERE nom_conseiller ='$prenom' AND date_envoi IS NOT NULL ORDER BY date DESC
Mais dans ma liste j'ai toutes les versions de chaque programme. Je ne veux seulement que les dernières versions de chaque programme.
Je rajoute alors une condition dans where pour ne retenir que les dernières versions avec MAX ()
SELECT devis_itineraires_versions.code_circuit, devis_itineraires_versions.date, devis_itineraires_versions.date_envoi, devis_itineraires_versions.version, devis_voyages.code_circuit, devis_voyages.code_client, devis_voyages.nom_conseiller FROM devis_itineraires_versions INNER JOIN devis_voyages ON devis_itineraires_versions.code_circuit = devis_voyages.code_circuit WHERE nom_conseiller ='$prenom' AND date_envoi IS NOT NULL AND version = (SELECT MAX(version) FROM devis_itineraires_versions a WHERE a.code_circuit = devis_voyages.code_circuit) ORDER BY date DESC
Mais je n'ai pas le résultat voulu. Je n'ai pas les dernières versions et il manque aussi des versions.
Merci pour votre aide et conseils.
Configuration: Windows / Chrome 87.0.4280.141
A voir également:
- Sous-requête et MAX()
- Driver max - Télécharger - Pilotes & Matériel
- I14 pro max - Accueil - Guide téléphones
- Max ou netflix - Accueil - Streaming
- Max maillot avis - Forum Consommation & Internet
- Réinitialiser kidicom max - Forum Téléphones & tablettes Android
2 réponses
Bonjour,
Dans le WHERE de ta sous-requête, il manque AND date_envoi IS NOT NULL pour que le MAX(version) s'applique à celles qui sont sélectionnables par ta requête principale.
Cela devrait refaire apparaître des résultats manquants.
Xavier
Dans le WHERE de ta sous-requête, il manque AND date_envoi IS NOT NULL pour que le MAX(version) s'applique à celles qui sont sélectionnables par ta requête principale.
Cela devrait refaire apparaître des résultats manquants.
Xavier
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
moi je ferais d'abors une requête qui retourne code_circuit et max(version).
ensuite j'ajouterais cela comme sous-requête à la première requête, ainsi:
moi je ferais d'abors une requête qui retourne code_circuit et max(version).
ensuite j'ajouterais cela comme sous-requête à la première requête, ainsi:
SELECT devis_itineraires_versions.code_circuit, devis_itineraires_versions.date, devis_itineraires_versions.date_envoi, devis_itineraires_versions.version, devis_voyages.code_circuit, devis_voyages.code_client, devis_voyages.nom_conseiller FROM devis_itineraires_versions INNER JOIN devis_voyages ON devis_itineraires_versions.code_circuit = devis_voyages.code_circuit INNER JOIN (la sous requete) m ON m.maxversion = devis_itineraires_versions.version AND m.code_circuit = devis_itineraires_versions.code_circuit WHERE nom_conseiller ='$prenom' AND date_envoi IS NOT NULL ORDER BY date DESC
Ca marche nickel !
Merci