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

MySQL Discussion :

Where XX = Max()


Sujet :

MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Where XX = Max()
    Bonjour,

    J'ai deux tables dans ma base de données : une table Equipement et une table Affectation qui possèdent une clé étrangère vers la table Equipement et un champ date.
    Equipement(#id_equipement , Libellé , numSerie)
    Affectation(#id_affectation , id_equipement , date)

    Je veux afficher tous les matériels avec leur dernière affectation (Max(date)).

    Le problème, c'est que lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * 
    from equipement , affectation 
    where affectation.id_equipemet = equipement.id_equipement 
        and date = Max(date) 
    group by equipement.id_equipement
    il y a erreur !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Bonsoir,

    Votre modélisation des données est incorrecte.

    Si un équipement est affecté à une certaine date, voici un meilleur schéma relationnel :

    Equipement(id_equipement , Libellé , numSerie)
    Affectation(#id_equipement , date)

    L'attribut "id_affectation" n'est pas indispensable, sauf si votre client en a besoin.

    Souhaitez-vous créer la requête sur avec vos tables actuelles ou celles ci-dessus ? Si vous optez pour la 1ère solution, veuillez vérifier vos clés étrangères avant que l'on vous réponde, vous avez du mal retranscrire votre BDD je pense.
    À moins que vous ne représentiez les clés primaires avec des # alors qu'on les soulignes habituellement. Le # désigne généralement une clé étrangère, comme dans mon schéma.

    Cordialement,

  3. #3
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Il serait intéressant de connaître l'erreur retournée.

    Pierre

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) Les jointures s'écrivent depuis plus de 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) 'date' est un mauvais nom de colonne car c'est un mot réservé du langage SQL.

    3) Il vaut mieux éviter la guerre des étoiles !

    La requête qu'il vous faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT e.id_equipement, e.Libelle, e.numSerie,
    	MAX(a.`date`) AS date_derniere_affectation
    FROM equipement e
    LEFT OUTER JOIN affectation a ON a.id_equipement = e.id_equipement
    GROUP BY e.id_equipement, e.Libelle, e.numSerie
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Problème de requête avec WHERE MAX()
    Par seb92500 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/01/2007, 12h27
  2. [ORACLE] max dans la clause where
    Par Cupidon dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/12/2006, 16h58
  3. Select Max Where
    Par guilld dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/12/2006, 09h50
  4. peut-on utiliser Max dans where ?
    Par chipo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/06/2005, 14h07
  5. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06

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