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 :

[ACCESS] SELECT "élaboré"


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 68
    Par défaut [ACCESS] SELECT "élaboré"
    Bonjour, je sollicite encore une fois votre aide car comme pouvait dire les romain : je perd mon SQL!


    J'aimerai faire une requête sur ma table "Table_Suivi_Etat" Qui ne ressort que la colonne "ID_Etat" pour chaque "ID_Formulaire" ou "Date_Debut_Etat" est le plus grand.

    Autrement dit,

    Je souhaite avoir les ID_Etat le plus récent par ID_Formulaire.

    Pour le moment en reprenant un exemple du Web Je suis arrivé à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT ID_Etat
    FROM Table_suivi_Etat
    WHERE EXISTS (ID_Formulaire,Date_Debut_Etat) IN(select ID_Formulaire,   MAX(Date_Debut_Etat)
    From Table_suivi_Etat
    group by ID_Formulaire)
    Cela me permet de récupérer les colonnes ID_Formulaire (Sans doublon) avec la date la plus grande (par ID_Formulaire)

    J'aimerai maintenant ressortir que la colonne ID_Etat correspondant a la selection précédente.

    En suivant le code trouvé sur le WEB je devrais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ID_Etat
    FROM Table_suivi_Etat
    WHERE EXISTS (ID_Formulaire,Date_Debut_Etat) IN(select ID_Formulaire,   MAX(Date_Debut_Etat)
    From Table_suivi_Etat
    group by ID_Formulaire)
    ACCES M'indique l'erreur suivante :

    Vous avez écrit une sous_requête pouvant renvoyer plus d'un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête Principale. Révisez l'instruction SELECT de la sous-requête pour obtenir un seul champ.


    Si vous avez une idée je suis preneur!!!

    Par la suite je dois insérer cette requete dans une autre :

    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
    23
    24
    25
    26
    27
    28
     
     
    SELECT Table_Formulaire.ID_Formulaire,  Table_Equipement.Nom_Equipement, Table_Ligne.Nom_Ligne, Table_VS.Nom_VS, Table_NatureDemande.Libellé_NatureDemande, Table_NivCompte.Nom_Compte AS 'Compte Actuel', Table_NivCompte1.Nom_Compte AS 'Compte Souhaité', Table_Suivi_Etat.Date_Debut_Etat as 'Date de Création'
     
    FROM ((((((((Table_Formulaire)
     
     
    INNER JOIN Table_Equipement
    ON (Table_Equipement.ID_Equipement = Table_Formulaire.ID_Equipement))
     
    INNER JOIN Table_Ligne 
    ON (Table_Equipement.ID_Ligne = Table_Ligne.ID_Ligne))
     
    INNER JOIN Table_VS
    ON (Table_VS.ID_VS = Table_Ligne.ID_VS))
     
    INNER JOIN Table_NatureDemande 
    ON (Table_Formulaire.ID_Nature = Table_NatureDemande.ID_NatureDemande))
     
    INNER JOIN Table_NivCompte
    ON (Table_NivCompte.ID_NivCompte = Table_Formulaire.ID_Compte_Actuel))
     
    INNER JOIN Table_NivCompte1
    ON ( Table_NivCompte1.ID_NivCompte = Table_Formulaire.ID_Compte_Demandé))
     
    INNER JOIN Table_Suivi_Etat
    ON ( Table_Suivi_Etat.ID_Formulaire = Table_Formulaire.ID_Formulaire))
    WHERE Table_Suivi_Etat.ID_Etat = 1
    Dois-je Insérer ma première requête avant le "FROM" de ma 2ème requête en enlevant le premier SELECT de ma première Requête?



    Je vous Remerci !!

    Gab

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Bonjour,
    Avec une jointure externe c'est faisable:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.col1
    from LaTable t1
    left outer join LaTable t2 on t2.col2 = t1.col2 and t2.coldate > t1.coldate
    where t2.col1 is null
    Reste à voir la gestion des doublons...

    Tatayo.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 68
    Par défaut
    @tatayo

    J'ai du oublié de le préciser mais concernant la première requête , tout se trouve dans une seule et même base.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Oui, mais comme tu peux le voir je n'accède qu'à une seule table, donc je ne comprends pas bien la remarque...

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 68
    Par défaut
    oups désolé je n'ai pas du comprendre une partie du code alors ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.col1
    FROM LaTable t1
    LEFT OUTER JOIN LaTable t2 ON t2.col2 = t1.col2 AND t2.coldate > t1.coldate
    WHERE t2.col1 IS NULL
    vous avez directement traiter la table dans le LEFT OUTER JOIN?

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    Pourriez vous préciser votre SGBD svp ?

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



Discussions similaires

  1. [MySQL] Select like et quotes
    Par Teppic dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/02/2009, 09h22

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