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 :

besoin d'aide sur une requête mysql


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut besoin d'aide sur une requête mysql
    bonjour
    j'utilise mysql 1.4.8 et j'ai ces trois tables

    Code : 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
     
     
    CREATE TABLE `T_UTIL` (
      `mat_util` int NOT NULL PRIMARY KEY,
      `pren_util` varchar(16) NOT NULL,
      `nom_util` varchar(16) NOT NULL,
      `ident_util` varchar(3) NOT NULL,
      `pass_util` varchar(8) NOT NULL
      )TYPE = InnoDB;
     
    CREATE TABLE `T_SERV` (
      `no_serv` int NOT NULL PRIMARY KEY,
      `nom_serv` varchar(16) NOT NULL
      )TYPE = InnoDB;
     
    CREATE TABLE `TJ_UTIL_SERV` (
      `no_serv` int NOT NULL,
      `mat_util` int NOT NULL,
      `date_entree` date NOT NULL,
      FOREIGN KEY(no_serv) REFERENCES T_SERV(no_serv),
      FOREIGN KEY(mat_util) REFERENCES T_UTIL(mat_util)
      )TYPE = InnoDB;
    La table jointe tj_util_serv est la table d'appartenance d'un utilisateur à un service
    sachant qu'un utilisateur peut appartenir à plusieurs services, non pas en même temps, mais dans sa carrière, je souhaite extraire la liste des utilisateurs appartenant ACTUELLEMENT à un service
    précision : date_entree est la date d'entrée d'un utilisateur dans un service
    je ne veux pas celui ou ceux ayant appartenu à ce service et qui ont changé
    auriez vous une idée ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 822
    Points
    30 822
    Par défaut
    Il faut déterminer la date_entree la plus récente pour chaque mat_util dans TJ_UTIL_SERV et en déduire le no_serv correspondant.
    Je me penche sur la requête
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 822
    Points
    30 822
    Par défaut
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  *
    FROM    t_util  AS  u
      INNER JOIN  tj_util_serv  AS  us
        ON  u.mat_util  = us.mat_util
      INNER JOIN  t_serv  AS  s
        ON  s.no_serv = us.no_serv
    WHERE   us.date_entree = 
              ( SELECT  MAX(x.date_entree)
                FROM    tj_util_serv  AS  x
                WHERE   x.mat_util  = u.mat_util
                GROUP BY  x.mat_util  
              );
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    et en intégrant le choix d'un no de service ça donne ça ,et ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    SELECT  *
    FROM    t_util  AS  u
      INNER JOIN  tj_util_serv  AS  us
        ON  u.mat_util  = us.mat_util
      INNER JOIN  t_serv  AS  s
        ON  s.no_serv = us.no_serv
    WHERE   us.date_entree = 
              ( SELECT  MAX(x.date_entree)
                FROM    tj_util_serv  AS  x
                WHERE   x.mat_util  = u.mat_util
                GROUP BY  x.mat_util  
              )
    AND us.no_serv = 2

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    ça c'est de la requête
    bravo à vous et merci infiniment

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    j'ai simplifié un peu ça donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT mat_util FROM tj_util_serv as x 
    WHERE no_serv = 2 and date_entree = 
    (SELECT MAX(date_entree) FROM `tj_util_serv` 
     where x.mat_util = mat_util 
    group by mat_util)
    encore merci et bonne journée

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

Discussions similaires

  1. [DEBUTANT] Besoin d'aide sur une requête Mysql
    Par Nerone21 dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/09/2008, 13h01
  2. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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