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 et SQL. Discussion :

Pour la valeur MAX d'un champ, Afficher les valeurs correspondantes des champs d'une table liée


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Pour la valeur MAX d'un champ, Afficher les valeurs correspondantes des champs d'une table liée
    Bonjour,
    Etant néophyte, je m'échine depuis plusieurs jours à coups de google et de tests infructueux pour résoudre le problème suivant:

    Soit une table 1 comprenant
    un champ MATERIEL; valeurs: MAT1, MAT2, MAT3 ...
    un champ NUMERO_EMPLACEMENT; valeurs 1, 2, 3 ...
    un champ DATE_DEPOT donnant la date à laquelle un matériel a été entreposé à l'emplacement NUMERO_EMPLACEMENT.

    Soit une table 2 liée à la précédente comprenant
    un champ NUMERO_EMPLACEMENT; valeurs 1, 2, 3 ... (Jointure)
    un champ NUMERO_BATIMENT et un champ NUMERO_PORTE précisant l'emplacement

    J'ai donc, dans la table 1,pour un matériel MAT1 donné, l'historique suivant:
    MAT1 10/01/2010 3 (numéro d'emplacement)
    MAT1 04/02/2010 1
    MAT1 05/03/2010 2
    MAT2 14/02/2010 2
    MAT2 17/03/2010 3
    MAT2 02/04/2010 1 etc ...

    Et dans la table 2:
    1 242 007
    2 238 010
    3 710 123 etc ...

    La question est la suivante: Je souhaite obtenir par une requête, pour chaque matériel, les caractéristiques du dernier emplacement attribué et sa date d'attribution.
    J'ai donc dans la ligne opération effectué un regroupement sur le champ MATERIEL, spécifié MAX pour le champ DATE_DEPOT, mais que faire pour que les champs NUMERO_BATIMENT et NUMERO_PORTE soit ceux correspondant au NUMERO_EMPLACEMENT associé à la valeur MAX du champ DATE_DEPOT pour chaque matériel ?
    En somme obtenir:
    MAT1 05/03/2010 238 (bâtiment) 010 (porte)
    MAT2 02/04/2010 242 007 etc...

    Merci de votre aide,

    Bonne journée et bon courage,


    William ASSAL

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    Plusieurs étapes :

    Lister les dates les plus récentes pour chaque matériel (T)
    Joindre cette date avec le matériel et l'emplacement (table1)
    Joindre cette jointure aux caractéristiques des emplacements (table2)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SELECT 
      TABLE1.MAT, 
      TABLE1.LADATE,
      TABLE1.EMPLACEMENT,
      TABLE2.NUMBATIMENT,
      TABLE2.NUMPORTE
    FROM 
      (
        TABLE1
          INNER JOIN
            (
              SELECT 
                Mat As M, 
                Max(LaDate) AS D
              FROM 
                Table1
              GROUP BY 
                Mat
            ) T 
          ON 
            T.M=TABLE1.MAT AND T.D=TABLE1.LADATE
      )
      INNER JOIN
        TABLE2 
      ON 
        TABLE2.NUMEMPLACEMENT=TABLE1.EMPLACEMENT

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci beaucoup pour cette solution que je n'aurais su établir, n'ayant pas de pratique de SQL.
    A ce propos, est-il possible via la grille de requête (Champ, Table, Opération, Critères ...) d'obtenir la génération de cette syntaxe SQL, ou bien la complexité de la requête et les limitations de l'interface imposent-elles l'utilisation directe de SQL ?
    Au quel cas je vais devoir rapidement suivre un recyclage dans les subtilités de ce langage !
    Encore merci pour votre aide,

    W. ASSAL

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est possible d'y arriver en créant indépendamment les 3 parties que je t'ai cité plus haut. Ici, ce n'est pas la syntaxe qui est complexe, mais le cheminement à établir

Discussions similaires

  1. [AC-2010] Erreur pour supprimer des données dans une table liée
    Par marieo dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2016, 10h00
  2. Réponses: 3
    Dernier message: 05/06/2012, 10h38
  3. Afficher les lignes se trouvant pas dans une table
    Par Invité dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/11/2011, 19h46
  4. Réponses: 1
    Dernier message: 13/02/2007, 16h03

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