IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

sous-requête et max()


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Juin 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 85
    Par défaut sous-requête et max()
    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

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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 ()

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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.

  2. #2
    Membre émérite
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Par défaut Bonjour Chile,
    La syntaxe me paraît bonne.
    Est-il certain que la "dernière" version est toujours celle qui a la valeur maximale de "version" pour un code_circuit donné ?

    Obtient-on le même résultat en sélectionnant la version sur la date la plus récente ?
    (à ce sujet il est fortement déconseillé de nommer une colonne avec un nom réservé tel que "date")

    Sans afficher d'informations confidentielles, peut-on avoir un exemple du résultat avec la première requête (toutes les versions) et la seconde ? C'est toujours tellement plus parlant...

  3. #3
    Membre actif
    Inscrit en
    Juin 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 85
    Par défaut
    Bonjour,
    J'ai rajouté la clause 'date_envoi IS NOT NULL' dans la sous requete, et ça fonctionne.
    merci pour votre réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sous requêtes : plusieurs "max" dans une liste
    Par Vincent Valentine dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/02/2016, 14h01
  2. Réponses: 8
    Dernier message: 28/10/2008, 14h00
  3. Sous requête et max et seconde colonne
    Par Oliv- dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/10/2007, 17h17
  4. Sous requête MAX
    Par Erakis dans le forum Requêtes
    Réponses: 7
    Dernier message: 01/08/2006, 20h56
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo