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 pour une requête SQL


Sujet :

Langage SQL

  1. #1
    cedrix57
    Invité(e)
    Par défaut besoin d'aide pour une requête SQL
    Bonjour,

    Voici une partie du schéma relationnel de ma base de donnée :
    Employe(idemploye, nomemploye, prenomemploye, emailemploye, idequipe$)
    DemandeAchat(iddemandeacha, nomarticledemande, justificationdemandeachat, idemployesoccupe$, idemployedemande$)
    Etat_DemandeAchat(idetatdemandeachat$, iddemandeachat$, dateetatachat, raisonetatachat)
    EtatDemandeAchat(idetatdemandeachat, libelleetatdemandeachat)

    J'essai de faire une requette, permettant d'afficher, au sein d'un même tableau,
    Le nom et prénom de l'employé qui fait la demande d'achat, le nom de l'article qu'il demande, la justification de la demande, la date de la demande (il s'agit d'une date de Etat_DemandeAchat pour laquel idetatdemandeachat vaut 1), et l'état actuel avec sa date (il s'agit cette fois d'une date de Etat_DemandeAchat pour laquel dateetatdemandeachat a la plus grande valeur, car pour une demande obtient plusieurs état à différente date donné, et on veut le dernier état donné)

    Ça fait depuis plus de 2 heures que j'essai de trouver cette requête, mais c'est sans succès...quelqu'un aurait une idée ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Vous pouvez essayer ceci :
    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
     
    SELECT 
           e.nomemploye,
           e.prenomemploye,
           da.nomarticledemande,
           da.justificationdemandeachat,
           eda.date_demande AS Date_demande_initiale,
           lib_eda.libelleetatdemandeachat AS Dernier_etat,
           edamax.dateetatachat AS Date_dernier_etat
    FROM Employe e
    JOIN DemandeAchat da ON e.idemploye = da.idemployedemande
    LEFT JOIN Etat_DemandeAchat eda ON eda.iddemandeachat = da.iddemandeachat AND eda.idetatdemandeachat = 1
    LEFT JOIN Etat_DemandeAchat edamax
         JOIN (
               SELECT iddemandeachat, max(dateetatachat) AS dateetatmax
               FROM Etat_DemandeAchat
               GROUP BY iddemandeachat
              ) dtmax
              ON dtmax.iddemandeachat = edamax.iddemandeachat
              AND dtmax.dateetatmax = edamax.dateetatachat
    ON edamax.iddemandeachat = da.iddemandeachat
    LEFT JOIN EtatDemandeAchat lib_eda ON lib_eda.idetatdemandeachat = edamax.idetatdemandeachat
    N'oubliez pas de préciser votre sgbd dans votre prochain message si ça ne fonctionne pas.

  3. #3
    cedrix57
    Invité(e)
    Par défaut
    Bonjour,

    Merci pour votre proposition.
    J'avais oublié de dire qu'il fallait aussi le nom et prénom de l'employé faisant la demande, mais sinon j'ai essayé, et ça marche presque, mais des fois il y a des lignes qui apparaissent deux fois, dont une affichant les résultats attendu, et l'autre affichant la date final au lieu de l'initiale.
    A oui mon SGBD est postgreSQL.
    Sinon j'ai trouvé une solution...mais un peu moche...mais ça marche lol
    Voici ma requête :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    SELECT LOWER(Edemande.nomemploye) AS nomEmployeDemande,
                                                        LOWER(Edemande.prenomemploye) AS prenomEmployeDemande,
                                                        DemandeAchat.nomArticleDemande AS nomArticleDemande,
                                                        DemandeAchat.justificationDemandeAchat AS justificationDemandeAchat,
                                                        LOWER(Esoccupe.nomemploye) AS nomEmployeSoccupe,
                                                        LOWER(Esoccupe.prenomemploye) AS prenomEmployeSoccupe,
                                                        TO_CHAR(Demande_EtatAchatDebut.dateEtatAchat,'DD/MM/YYYY à HH24:MI:SS') dateEtatDebut,
                                                        TO_CHAR(DateEtatActuelle.dateActuelle,'DD/MM/YYYY à HH24:MI:SS') dateActuelle,
                                                        DateEtatActuelle.etatActuel AS etatActuel
                                                FROM Employe Edemande INNER JOIN DemandeAchat ON Edemande.idEmploye = DemandeAchat.idEmployeDemande
                                                LEFT OUTER JOIN  Employe Esoccupe ON Esoccupe.idEmploye = DemandeAchat.idEmployeSoccupe
                                                INNER JOIN Demande_EtatAchat Demande_EtatAchatDebut ON Demande_EtatAchatDebut.idDemandeAchat = DemandeAchat.idDemandeAchat AND Demande_EtatAchatDebut.idEtatDemandeAchat = 1
                                                INNER JOIN 
                                                    (SELECT * FROM (SELECT Demande_EtatAchat.idDemandeAchat AS idDemandeAchat,
                                                                MAX(dateEtatAchat) AS dateActuelle,
                                                                libelleEtatDemandeAchat AS etatActuel
                                                                FROM DemandeAchat, Demande_EtatAchat, EtatDemandeAchat
                                                                WHERE Demande_EtatAchat.idDemandeAchat = DemandeAchat.idDemandeAchat
                                                                    AND EtatDemandeAchat.idEtatDemandeAchat=Demande_EtatAchat.idEtatDemandeAchat
                                                                GROUP BY Demande_EtatAchat.idDemandeAchat,
                                                                        libelleEtatDemandeAchat) AS T0
                                                            WHERE (idDemandeAchat, dateActuelle, etatActuel) NOT IN (
                                                            SELECT T1.idDemandeAchat AS idDemandeAchat, T1.dateActuelle AS dateActuelle, T1.etatActuel AS etatActuel FROM (SELECT Demande_EtatAchat.idDemandeAchat AS idDemandeAchat,
                                                                MAX(dateEtatAchat) AS dateActuelle,
                                                                libelleEtatDemandeAchat AS etatActuel
                                                                FROM DemandeAchat, Demande_EtatAchat, EtatDemandeAchat
                                                                WHERE Demande_EtatAchat.idDemandeAchat = DemandeAchat.idDemandeAchat
                                                                    AND EtatDemandeAchat.idEtatDemandeAchat=Demande_EtatAchat.idEtatDemandeAchat
                                                                GROUP BY Demande_EtatAchat.idDemandeAchat,
                                                                        libelleEtatDemandeAchat) AS T1, (SELECT Demande_EtatAchat.idDemandeAchat AS idDemandeAchat,
                                                                MAX(dateEtatAchat) AS dateActuelle,
                                                                libelleEtatDemandeAchat AS etatActuel
                                                                FROM DemandeAchat, Demande_EtatAchat, EtatDemandeAchat
                                                                WHERE Demande_EtatAchat.idDemandeAchat = DemandeAchat.idDemandeAchat
                                                                    AND EtatDemandeAchat.idEtatDemandeAchat=Demande_EtatAchat.idEtatDemandeAchat
                                                                GROUP BY Demande_EtatAchat.idDemandeAchat,
                                                                        libelleEtatDemandeAchat) AS T2
                                                                        WHERE T1.idDemandeAchat = T2.idDemandeAchat AND T1.dateActuelle < T2.dateActuelle)) AS DateEtatActuelle
                                                    ON DateEtatActuelle.idDemandeAchat = DemandeAchat.idDemandeAchat
    Cédric

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Citation Envoyé par cedrix57 Voir le message
    J'avais oublié de dire qu'il fallait aussi le nom et prénom de l'employé faisant la demande, mais sinon j'ai essayé, et ça marche presque, mais des fois il y a des lignes qui apparaissent deux fois, dont une affichant les résultats attendu, et l'autre affichant la date final au lieu de l'initiale.
    Si vous nous donnez un exemple des données qui posent problème, on pourra peut être vous aider à faire une requête plus adaptée.

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

Discussions similaires

  1. Besoin d'aide pour une requête SQL
    Par p_oum dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 26/11/2009, 09h29
  2. Besoin d'aide pour une requête SQL
    Par sexy-meta dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/07/2008, 14h36
  3. Besoin d'aide pour une requête SQL
    Par FranckyVegas dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/05/2008, 20h16
  4. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  5. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56

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