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

Requêtes MySQL Discussion :

Récupérer le statut des cmd avec la date la plus récente


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut Récupérer le statut des cmd avec la date la plus récente
    bonjour, je bloque sur une requete vraiment bete,

    voilà j'ai une table historique (id_history,id_order,id_order_state,date_added)

    je voudrait récupérer le id_order_state qui a la date la plus récente par order,

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(date_adde), id_order,id_order_state FROM historique group by id_order
    seulement il me retourne un id_order_state qui ne correspond pas à la ligne du max(date_adde)

    en gros la vraie ligne serait
    ---------------------------------------
    id_order--id_order_state--date--
    --------------------------------------
    1-----------3----------2008-10-10


    et il me sort
    ---------------------------------------
    id_order--id_order_state--date--
    --------------------------------------
    1-----------6----------2008-10-10


    bizarre

    est ce que quelqu'un peut m'aider ?
    merci

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT h.date_adde, h.h.id_order,id_order_state 
    FROM historique h 
    WHERE  h.date_adde=(SELECT MAX(h2.date_adde) FROM historique h2 
                                   WHERE h2.id_order=h.id_order)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci tu me sauves , mais y'a pas plus simple ? sans sous requete ?

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    C'est un cas d'école où je ne saurais faire sans sous-requête.
    Si tu veux le plus récent d'un seul, tu peux t'en tirer avec un ORDER BY DESC et LIMIT 1, mais vu que tu veux du collectif, je ne vois pas comment faire autrement.

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    bonjour,

    A maysa, non ce n'est pas bizarre
    d'ailleurs la requête que tu proposes ne passerais pas sur un autre SGBD
    tu groupes par id_order et tu prends le max de la date, par contre tu ne precises pas quel id_order_state choisir... or ce n'est pas au SGBD de faire le choix. MySQL va en prendre un aléatoirement mais avec d'autres SGBD tu auras une belle erreur

    c'est pour cela que tu es obligé de passer par une sous requête

    A+

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Cybher Voir le message
    bonjour,

    A maysa, non ce n'est pas bizarre
    d'ailleurs la requête que tu proposes ne passerais pas sur un autre SGBD
    tu groupes par id_order et tu prends le max de la date, par contre tu ne precises pas quel id_order_state choisir... or ce n'est pas au SGBD de faire le choix. MySQL va en prendre un aléatoirement mais avec d'autres SGBD tu auras une belle erreur

    c'est pour cela que tu es obligé de passer par une sous requête

    A+
    Bonjour en fait, non car je ne connais pas id_order_state et c'est ce que je veux récupérer justement , je veux savoir quel dernier statut à la commande et pour cela je dois bien grouper pour l'avoir pour toutes les commandes.
    Merci, cette requete fonctionne bien..

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par maysa Voir le message
    je veux savoir quel dernier statut à la commande et pour cela je dois bien grouper pour l'avoir pour toutes les commandes.
    Justement pas.
    GROUP BY ne doit servir (sauf dans quelques rarissimes cas) qu'en conjugaison avec une ou des fonctions statistiques dans la clause SELECT (COUNT, SUM, AVG, MIN, MAX, ...) et toutes les colonnes de la clause SELECT qui ne participent pas à une fonction de ce type doivent figurer dans la clause de regroupement (sauf pour MySQL qui est laxiste là-dessus).
    DB2, quand je l'utilisais, exigeait en outre que les colonnes du GROUP BY apparaissent en premier dans la clause SELECT et dans le même ordre.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Justement pas.
    GROUP BY ne doit servir (sauf dans quelques rarissimes cas) qu'en conjugaison avec une ou des fonctions statistiques dans la clause SELECT (COUNT, SUM, AVG, MIN, MAX, ...) et toutes les colonnes de la clause SELECT qui ne participent pas à une fonction de ce type doivent figurer dans la clause de regroupement (sauf pour MySQL qui est laxiste là-dessus).
    DB2, quand je l'utilisais, exigeait en outre que les colonnes du GROUP BY apparaissent en premier dans la clause SELECT et dans le même ordre.
    Oh un Breton

    Ben si, pour avoir le dernier statut d'une commande faut bien faire un group by numCmd. Bon c'est vrai que si je veux tous les champs je dois passer par une sous-requete.
    j'ai utilisé ta requete mais n'est pas encore très bien compris comment elle fonctionnait...
    et comme j'utilise Mysql, je ne suis pas obligée de mettre tous les champs dans le group by, mais c'est une mauvaise habitude.
    bonne soirée

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par maysa Voir le message
    Ben si, pour avoir le dernier statut d'une commande faut bien faire un group by numCmd.
    Non, non.
    Comme on te l'a expliqué, cette façon de faire est une hérésie eskuèlesque.

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 08/01/2018, 14h54
  2. Trouver les enregistrements avec les dates les plus récentes
    Par fullmetalalchemiste dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/05/2012, 10h05
  3. Réponses: 10
    Dernier message: 22/07/2010, 10h20
  4. Récupérer la liste des tables avec HSQLDB
    Par Kerod dans le forum JDBC
    Réponses: 1
    Dernier message: 23/02/2009, 17h48

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