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

Langage SQL Discussion :

Obtenir la valeur correspondant à sa ligne avec MAX()


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Obtenir la valeur correspondant à sa ligne avec MAX()
    Bonjour !

    L'objectif est de récupérer dans une base de donnée chaque marché et son dernier état attribué.
    La table 'histo_product' dans laquelle rechercher possèdent les colonnes:
    • hi_date de type DATETIME
    • hi_market de type VARCHAR
    • hi_state de type INTEGER


    Pour ce faire, j'ai penser utiliser la fonction MAX():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(hi_date) AS last_date, hi_market, hi_state FROM histo_product GROUP BY hi_market;
    Mais voilà, si les marchés sont bien afficher une fois chacun et associés aux bonnes dates, les état récupérer ne correspondent pas, eux, aux bonnes dates.
    Pourtant c'est une anomalie

    La seule solution que j'ai trouvé est de faire une première requête récupérant les marchés et leurs dates, puis une nouvelle requête pour chaque marché récupéré. Ça ne semble pas optimiser...

    Auriez-vous des suggestions pour corriger / contourner ce problème ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 671
    Points : 11 199
    Points
    11 199
    Par défaut
    Bonjour,
    C'est décidément une question qui revient souvent, très souvent.

    La réponse ici.

    Accessoirement ta requête est syntaxiquement fausse, et seul MySQL va l'accepter, avec comme conséquence ce que tu observe: un résultat faux.

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Accessoirement ta requête est syntaxiquement fausse, et seul MySQL va l'accepter, avec comme conséquence ce que tu observe: un résultat faux.
    Bonjour Tatayo, merci de ta réponse !

    Peux-tu préciser en quoi la syntaxe est fausse ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 671
    Points : 11 199
    Points
    11 199
    Par défaut
    Dans une requête, toutes les colonnes qui sont dans le SELECT et qui ne font pas l'objet d'une fonction d'agrégation (min(),max()…) doivent être dans le GROUP BY.
    Or dans ta requête ce n'est pas le cas.
    Si dans ton exemple pour chaque couple hi_date/hi_market il existe plusieurs lignes avec des valeurs différentes pour hi_state, quelle valeur doit être renvoyée pour cette colonne ?
    Rien ne permet de le savoir, donc presque tous les SGBD vont rejeter cette requête.
    Sauf MySQL qui va renvoyer pour hi_state une valeur, sauf que rien ne permet de savoir laquelle, et rien ne garanti que ce sera toujours la même.

    Tatayo.

Discussions similaires

  1. [Débutant] obtenir une valeur de la ligne courante dans BindingSource
    Par minosys dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/09/2014, 22h13
  2. Obtenir la valeur d'un attribut avec des balises imbriquées
    Par qdaemon_fr dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/12/2013, 16h23
  3. Réponses: 3
    Dernier message: 13/01/2012, 12h58
  4. comment récuperer la valeur d'une ligne avec un datagridview
    Par moha1984 dans le forum Windows Forms
    Réponses: 14
    Dernier message: 08/08/2008, 13h10
  5. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 10h34

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