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 :

En difficulté pour faire une requete


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut En difficulté pour faire une requete
    re Bonjour les gens ,

    je m'explique :

    J'ai 2 tables : PERSONNE et ADHESION

    chaque table est referencer par un meme id qui est num_personne

    Pour chaque personne 1 ou plusieur adhesion possible (en cours et anterieur)

    Mon but :

    Recuperer pour chaque personne sa derniere adhesion en cours sachant que le champs utiliser pour connaitre cette derniere adhesion est le champs DATE_FIN dans la table ADHESION !

    j'avais penser à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT P.NOM_PERSONNE FROM PERSONNE_ADAUC AS P WHERE EXISTS (SELECT * FROM ADHESION_ADAUC AS A WHERE A.NUM_PERSONNE = P.NUM_PERSONNE ORDER BY DATE_FIN DESC LIMIT 0,1)
    Mais non !!

    Une idéé ? jointure .... sous requete mieux allaborer !


    Merci !!!!!

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et avec ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    C'est peu être une solution mais je voudrais savoir aussi si ma requête semble correct pour ce que je souhaite faire !


  4. #4
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Hello,
    j'aurais plutôt fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    SELECT P.NUM_PERSONNE,
                P.NOM_PERSONNE, 
                MAX(A.DATE_FIN)
     FROM PERSONNE_ADAUC P.
             ADHESION_ADAUC  A 
    WHERE A.NUM_PERSONNE = P.NUM_PERSONNE 
    GROUP BY P.NUM_PERSONNE,
               P.NOM_PERSONNE
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Merci bien , avec mes condition en plus c quasiment ce que je souhaiter !!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Je reviens a la charge une fois de plus !! pas facile ce sql

    Alors voila mon probleme, en rapport avec ce qui se situe au dessus bien entendu :

    Je voudrais par ma requete ne selectionner que mes anciens adherents , (si une personne a anciennement adherer et quel est toujours adherente aujourdhui elle est bani de mon choix !)

    par exemple :

    • Pour Paul
      --> debut 2003-02-17 ; fin 2004-02-17 (1er adhesion)
      --> debut 2004-02-18 ; fin 2005-02-17 (2eme adhesion)
      et enfin l'adhesion en cours --> debut 2005-02-22 ; fin 2006-02-21


    Pour cette personne il ne sera rien retourner car c'est bien une ancienne adherente , mais toujours adherente actuellement !!

    J'espere etre clair dans mon probleme , pas tres evident d'etre explicite pour ce genre de chose !

    Bref je ne sais pas trop comment m'y prendre pour faire cette requete , celle donner par Iper que je remerci me conviens pas mal, le hic est que je recupere notre exemple Paul dans mes resultats !!

    Merci de votre aide à tous et toutes !!

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    En modifiant légèrement la requête de lper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT P.NUM_PERSONNE,
                P.NOM_PERSONNE, 
                MAX(A.DATE_FIN)
     FROM PERSONNE_ADAUC P.
             ADHESION_ADAUC  A 
    WHERE A.NUM_PERSONNE = P.NUM_PERSONNE 
    GROUP BY P.NUM_PERSONNE,
               P.NOM_PERSONNE
    HAVING MAX(A.DATE_FIN) < DateduJour
    J'utilise DateduJour comme filtre à toi de voir ce que veux dire "adhesion en cours", et en fonction de ton SGBD (SYSDATE, now()...)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    voila ma requete perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT P.NUM_PERSONNE, P.NOM_PERSONNE, MAX(A.DATE_FIN) FROM PERSONNE AS P ,ADHESION AS A WHERE A.NUM_PERSONNE = P.NUM_PERSONNE AND A.DATE_FIN < NOW() AND DATE_DEBUT < NOW() AND P.EMAIL_PERSONNE IS NOT NULL AND P.EMAIL_PERSONNE <> '' AND P.MAIL_LONG IS NOT NULL AND P.EMAIL_PERSONNE LIKE '%@%.%' GROUP BY P.NUM_PERSONNE, P.NOM_PERSONNE ORDER BY `NOM_PERSONNE` ASC
    Donc avec ceci je prend en compte les dates de fin et dates de debut !! j'exclus bien Paul (la ligne adhesion en cours) mais je n'exclus pas le faite qu'il est été avant ancien adherant !!! donc je me retrouve avec un resultat ou Paul ne devrait pas y figurer !!

    Le plus simple je pense serait d'exclure tout autre resultat lié a une personne celle ci est encore adherent !!
    Si une personne n'es pas adherent actuellement verifier qu'elle a bien été un ancienne adherent !!

    ...

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    As-tu essayé ma suggestion ?
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Oui tout à fait , je ne me serait pas permis de poster sans tenter diverse solutions avant !!


    re , je suis desoler mais apparment ta soluce fonctionne , j'ai retenter et j'avais fais une erreur de frappe !!

    merci pour cette soluce , saurait tu me l'expliquer vaguement s'il te plait ??

    Merci encore !!!!!

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    La clause HAVING permet de mettre des conditions sur le groupe et non sur les éléments du groupe, comme le WHERE, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING MAX(A.DATE_FIN) < NOW()
    permet de ne sélectionner que les groupes dont le MAX de la date de fin est antérieur à aujourd'hui, donc Paul est bien exclu, puisque sont MAX(DATE_FIN) = 2006-02-21 qui est futur.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

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

Discussions similaires

  1. [AC-2003] Difficulté pour faire une requête
    Par ouinih dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/02/2012, 19h09
  2. Aide pour faire une requete
    Par Msysteme dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 09/03/2010, 18h19
  3. Réponses: 6
    Dernier message: 13/03/2009, 12h31
  4. Difficulté pour réaliser une requete peu complexe :/
    Par DanaX dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/05/2007, 13h55
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

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