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 :

Requete SQL compliquée


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Requete SQL compliquée
    bonjour, j'ai un probleme, je doit effectuer une requete en sql assez compliquée etant donné que je debute...
    Je travaille avec Iseries (sous AS400)

    voici ma base de départ

    personne -- datedenaissance -- datedufichierdecréation -- CodeMvt

    toto -- 19870605 -- 20060813 -- A
    toto -- 19870605 -- 20061102 -- C
    lili -- 20000530 -- 20071225 -- A
    lili -- 20000530 -- 20071225 -- C
    lili -- 20000530 -- 20071103 -- M
    juju -- 19931201 -- 20070708 -- M

    Ce que je veux obtenir : (Dans les deux premiers champs si les lignes sont identiques (ex : "toto 19870605" apparait deux fois) il faut aller regarder leurs datedufichierdecréation correspondantes et ne selectionner que la plus récente, il peut arriver que pour une meme personne il y est 2 fois la meme datedufichierdecréation (ex : lili 20000530 200071225 ) dans ce cas la il faut comparer les CodeMvt et selectionner le dernier dans le cas ( lili 20000530 200071225 ) on selectionne la ligne ou le CodeMvt est C etant donné qu'il est le dernier.

    La table que je veux obtenir :

    personne -- datedenaissance -- datedufichierdecréation -- CodeMvt


    toto -- 19870605 -- 20061102 -- C

    lili -- 20000530 -- 20071225 -- C

    juju -- 19931201 -- 20070708 -- M


    Merci de votre aide, je ne sais pas du tout comment aborder cette requete.

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Je propose une manip pas super propre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.personne, a.datedenaissance, a.datedufichierdecreationn,
           chr(max(ASCII (a.codemvt)))
      FROM tatable a
     WHERE datedufichier =
              (SELECT MAX (b.datedufichier)
                 FROM tatable b
                WHERE a.personne = b.personne -- en supposant que c'est une cle
                  AND a.datedenaissance = b.datedenaissance -- en supposant que c'est une cle
                  AND b.datedufichierdecreationn <= SYSDATE)

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 384
    Points
    28 384
    Par défaut
    En supposant que par dernier mouvement tu veux dire celui dont la lettre est la plus grande dans l'ordre alphabétique :
    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
    SELECT  t1.personne
        ,   t1.datedenaissance
        ,   t1.datedufichierdecreation
        ,   MAX(t1.codemvt)
    FROM    matable AS t1
    WHERE   EXISTS
            (   SELECT  1   
                FROM    matable AS t2
                WHERE   t1.personne = t2.personne
                    AND t1.datedenaissance = t2.datedenaissance
                HAVING  MAX (t2.datedufichierdecreation)    = t1.datedufichierdecreation
            )
    GROUP BY    t1.personne
        ,   t1.datedenaissance
        ,   t1.datedufichierdecreation
    ;
    Si dernier mouvement signifie se baser sur l'ordre des lignes, il ne faut pas oublier qu'une table n'est pas ordonnée. Donc il faut toujours se baser sur un critère de tri.

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci
    Merci pour les reponses les deux solutions marchent.

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

Discussions similaires

  1. probleme de requete SQL compliqué (Mysql)
    Par jejemimi dans le forum Langage SQL
    Réponses: 18
    Dernier message: 23/02/2011, 18h24
  2. Modification requete sql déjà compliqué !
    Par Maxow dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/11/2008, 23h50
  3. Boutton de confirmation et lance une requete sql! compliqué ?
    Par bullrot dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/09/2008, 14h11
  4. Requete SQL compliquée
    Par tanglung dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/04/2007, 13h55
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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