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 :

Aide Requete SQL Access 3 tables avec la fonction Max [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Aide Requete SQL Access 3 tables avec la fonction Max
    Bonjour tout le monde
    J'aimerai avoir de l'aide sur une requête avec une fonction Max sur trois tables avec le SQL sous ACCESS 2016

    mes trois tables sont comme suit

    T_Equipements
    ID_Equipement
    Designation
    Marque
    Modele

    T_Affectations
    ID_Affectation
    ID_EquipementFk
    ID_ServiceFk
    DateAffectation

    T_Services
    ID_Service
    NomService

    je voudrai formuler une requête qui permet de renvoyer l'état des équipements (y compris les infos de la table Equiepements) par service (y compris les noms de services) avec LA DERNIÈRE DATE D'AFFECTATION

    Merci de bien vouloir me répondre.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    • Vous reliez les 3 tables entre elles sur les champs de liaison.
    • Vous fêtes un regroupement sur les champs que vous souhaitez afficher IDEquipement,Designation...,NomService...: Ligne opération - Regroupement
    • Avec la fonction Max sous le champ DateAffectation : Ligne opération - Max


    Cdlt,

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    je n''y ai pas trouvé ce que je cherchais.
    les trois tables sont liées et la table TAffectations est une table de jonction qui sert a stock plusieurs affectations d'un seul équipement.
    j'ai trouvé pas mal de requêtes SQL relatives au sujet mais qui ne marchent pas sous acces pour probleme de syntax

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Si vos noms sont justes, le SQL donnerait cela :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ID_Equipement, Designation, Marque, Modele, NomService, Max(DateAffectation) as Date_Derniere_Affectation
    from T_Equipements, T_Affectations, T_Services
    where (T_Equipements.ID_Equipement = T_Affectations.ID_EquipementFk) and  (T_Services.ID_Service = T_Affectations.ID_ServiceFk)
    group by ID_Equipement, Designation, Marque, Modele, NomService;

    Cdlt,

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    ceci ne marche pas.
    le résultat donne des doublons des Equipements (c'est a dire un équipement avec diverses dates et de services d'affectation)

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Je ne peux malheureusement pas tester, essayer comme ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select ID_Equipement, Designation, Marque, Modele, NomService, DateAffectation as Date_Derniere_Affectation
    from T_Equipements, T_Affectations, T_Services
    where (T_Equipements.ID_Equipement = T_Affectations.ID_EquipementFk) and (T_Affectations.DateAffectation = DMax("DateAffectation","T_Affectations","ID_EquipementFk=" & T_Equipements.ID_Equipement)) and (T_Services.ID_Service = T_Affectations.ID_ServiceFk)

    Soyez compréhensif

    ID_Equipement est de type numérique ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bon j'ai fini par trouver la solution

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT A.*, B.DateAffectation, C.NomService
    FROM (SELECT ID_EquipementFk, Max(DateAffectation) AS MaxDate
    FROM T_Affectations GROUP BY ID_EquipementFk) X
    INNER JOIN ((T_Affectations B INNER JOIN T_Equipements A 
    ON B.ID_EquipementFk = A.NumInv)
    INNER JOIN T_Services C ON B.ID_ServiceFk = C.ID_Service)
    ON (X.MaxDate = B.DateAffectation)
    AND (X.ID_EquipementFk = B.ID_EquipementFk);

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Oui ça correspond à ce que je vous ai donné en beaucoup plus compliqué

    Avec des conditions :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select T_Equipements.*, NomService, DateAffectation
    from T_Equipements, T_Affectations, T_Services
    where (T_Equipements.ID_Equipement = T_Affectations.ID_EquipementFk) and 
    (T_Affectations.DateAffectation =(select Max(DateAffectation) as DateMax 
    from T_Affectations as T1 where T1.ID_EquipementFk= T_Equipements.ID_Equipement)) 
    and (T_Services.ID_Service = T_Affectations.ID_ServiceFk))

    Ou avec des jointures à la place :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_Equipements.*, T_Services.NomService, T_Affectations.DateAffectation
    FROM (T_Equipements INNER JOIN T_Affectations ON T_Equipements.ID_Equipement = T_Affectations.ID_EquipementFk) 
    INNER JOIN T_Services ON T_Affectations.ID_ServiceFk = T_Services.ID_Service
    WHERE (T_Affectations.DateAffectation)=(select Max(DateAffectation) as DateMax 
    from T_Affectations as T1 where T1.ID_EquipementFk= T_Equipements.ID_Equipement);

    C'est le même principe que ce que je vous ai donné avec une sous-requête.

    pensez à clore la discussion et un conseil soyez un peu plus reconnaissant et sympa à l'avenir

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autriche

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    oui merci monsieur.
    j'etais tellement emballé de continuer mon projet (bloqué depuis 15 jours) que j'ai oublié les fondamentaux.
    merci egalement pour les deusx syntaxes que vous venez d'envoyer,

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Citation Envoyé par toufiketc Voir le message
    oui merci monsieur.
    j'etais tellement emballé de continuer mon projet (bloqué depuis 15 jours) que j'ai oublié les fondamentaux.
    merci egalement pour les deusx syntaxes que vous venez d'envoyer,
    Pas de soucis

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

Discussions similaires

  1. Aide requete sql sur 2 tables
    Par waspy59 dans le forum Développement
    Réponses: 4
    Dernier message: 31/05/2018, 21h06
  2. Réponses: 10
    Dernier message: 11/08/2009, 15h43
  3. Réponses: 5
    Dernier message: 03/09/2007, 14h52
  4. aide requete sql access 2000
    Par bab69 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/05/2006, 21h56
  5. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 14h24

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