Sous-requête et MAX()

Fermé
chile - Modifié le 11 janv. 2021 à 09:13
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 11 janv. 2021 à 15:57
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

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:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 janv. 2021 à 14:14
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
1
Bonjour Xavier,
Ca marche nickel !
Merci
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 janv. 2021 à 14:27
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:
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
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 janv. 2021 à 14:52
Oui c'était mon option suivante si la modif "facile" ne fonctionnait pas, c'est plus propre :)
Ceci dit même dans ce cas, la sous-requête DOIT contenir la clause sur date_envoi
0
chile > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
11 janv. 2021 à 15:13
oui c'était date_envoi IS NOT NULL qui manquait dans la sous requete. Merci
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
11 janv. 2021 à 15:57
je me demande si toutes les db SQL gèrent bien une telle sous-requête impliquant une table hors de la sous-requête.
et le type de db n'est pas mentionné.
0
Merci.
J'ai rajouté date_envoi IS NOT NULL dans la sous requete et ca fonctionne
0