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

MS SQL Server Discussion :

[MS-SQL]requete sur 3 tables


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut [Résolu][MS-SQL]requete sur 3 tables
    Bonjour,

    On a 3 tables : ECHANTILLON , ANALYSE, RESULTAT

    Un ECHANTILLON contient des ANALYSES.
    Une ANALYSE contient des RESULTATS.

    Pour un ECHANTILLON donné, on veut obtenir le premier RESULTAT (trié par dateExamen) de chaque ANALYSE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT     *
    FROM         RESULTAT r INNER JOIN
                          ANALYSE a ON r.NoAnalyse = a.NO_ANALYSE
    WHERE     (a.NoEchant = 1)
    ORDER BY r.DateExamen DESC
    Cette requete retourne tous les resultats de toutes les analyses.

    Comment faire pour avoir uniquement le premier résultat de chaque analyse ??

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    tu es sur quel SGBD ?

    Utilise max ou min sur la date dans une clause having,
    si t y arrive pas redemande nous.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    je suis sous SQL Serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT     r.NoAnalyse, MAX(r.DateExamen)
    FROM         RESULTAT r INNER JOIN
                          ANALYSE a ON r.NoAnalyse = a.NO_ANALYSE
    WHERE     (a.NoEchant = 1)
    GROUP BY r.NoAnalyse
    le problème : je ne peut pas avoir d'autres champs dans le select

    Comment faire pour avoir les autres champs des 2 tables ?

    Merci

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    J'ai un peu ma base en caraf ce matin, donc je peux pas tout tester mais il me semble que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT     r.NoAnalyse, MAX(r.DateExamen), a.champ1, a.champ2
    FROM         RESULTAT r INNER JOIN 
                          ANALYSE a ON r.NoAnalyse = a.NO_ANALYSE 
    WHERE     (a.NoEchant = 1) 
    GROUP BY r.NoAnalyse, a.champ1, a.champ2
    devrait fonctionner ?
    dis moi svp.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    Mon probleme est que je ne veux grouper que sur le NoAnalyse et avoir tous les champs des 3 tables dans le SELECT

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    bon ben essaye avec ca alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT *
    FROM
      (SELECT     MAX(r.DateExamen) date, r.NoAnalyse num
       FROM         RESULTAT r INNER JOIN 
                          ANALYSE a ON r.NoAnalyse = a.NO_ANALYSE 
      WHERE     (a.NoEchant = 1)
      GROUP BY r.NoAnalyse) SousRequete 
    INNER JOIN  ANALYSE a ON SousRequete.num = a.NO_ANALYSE
    INNER JOIN  RESULTAT Res ON Res.NoAnalyse = SousRequete.num
                                           AND Res.DateExamen = SousRequete.date                    
    WHERE (a.NoEchant = 1)
    Desole je suis pas tres fort en jointure dans le FROM j'espere que la syntaxe est correcte,

    le raisonnement est le suivant :

    1. tu recuperes la date max pour chaque Analyse,
    2. tu te sers de cette sous requete pour faire une jointure sur les deux autres tables.

    C pas tres clair mais j'espere que ca t'aidera.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    Merci, ça marche !!!

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

Discussions similaires

  1. [SQL] Requete sur deux tables
    Par dutom007 dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/12/2009, 20h11
  2. [SQL] Requete sur plusieurs tables
    Par Emotion dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 24/08/2007, 19h38
  3. [SQL] SQL Requete sur plusieurs tables/traitement particulier
    Par fluojet dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/02/2007, 19h59
  4. Réponses: 1
    Dernier message: 06/12/2006, 18h25
  5. [SQL] requete sur deux tables
    Par yaka2 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/11/2006, 17h06

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