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 :

Utilisation fonction MAC associé a des Dates et Individu


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Utilisation fonction MAC associé a des Dates et Individu
    Bonjour a tous,
    je possède une relation nommée AS_AIDELEG qui détient un historique de toutes les dates "d'Aides légales" des personnes dans la base. Ces dates sont stockées dans un attribut nommé "ALEG_DEM_DET", elles sont de la forme jj/mm/aaaa. Cette relation est reliée à la relation "AS_INDIVIDU" où sont stockés les individus.
    Je voudrais récupérer les dates les plus récentes par personne ( et non l'historique) pour ensuite afficher les personnes qui bénéficient des "Aides légales" par année et par trimestre.

    pour cela je récupère les dates les plus récentes avec la fonction
    agrégatives MAX comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT AS_AIDELEG.ALEG_DATE_DEM 
    FROM AS_AIDELEG
    WHERE  (AS_AIDELEG.ALEG_DATE_DEM, AS_AIDELEG.id_individu) = 
          (SELECT (MAX(A.ALEG_DATE_DEM), B.ID_INDIVIDU) 
           FROM AS_AIDELEG A, AS_INDIVIDU B 
           WHERE A.ID_INDIVIDU =  B.ID_INDIVIDU 
           GROUP BY B.IND_NOMP, B.ID_INDIVIDU);
    En exécutant cette requête, un problème :
    "sous-interrogation ramenant un enregistrement de plus d'une ligne"

    Je voudrais pouvoir récupérer ma date la plus récente (MAX) dans le where pour pouvoir ensuite dans mon select découper cette date en année et trimestre

    Merci pour vos réponses.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Petit ajout d'information
    Je suis actuellement sur "Business Object" l'affichage de l'année et du trimestre peut être automatiquement fait par le logiciel. Mon seul porblème et la récupération de la date en cours ( date la plus récente ) dans le "where".

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    quel est votre sgbd?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,

    quel est votre sgbd?
    j'utilise Oracle

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Le plus simple serait de faire une jointure avec votre sous-requête qui est actuellement dans votre WHERE.
    ~ Lola ~

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Sous Oracle (si pas trop vieille version) vous avez ces 2 possibilités qui sont les plus optimales :

    http://laurentschneider.com/wordpres...ow_number.html

    sinon, il faut faire une jointure avec votre sous-requête.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select col_1, col_2, ...
    from ma_table a
    inner join (select col_pk, max(ma_date) as max_dte
     from ma_table
     group by col_pk) as b on a.col_pk = b.col_pk and b.max_dte = b.ma_date

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    d'accord, je vais essayé tous ca maintenant
    merci pour vos réponses en tous cas !

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ALEG_DATE_DEM
    FROM AS_AIDELEG A
    INNER JOIN (SELECT ID_INDIVIDU, MAX(ALEG_DATE_DEM) AS MAX_DTE FROM AS_AIDELEG GROUP BY ID_INDIVIDU) AS B 
    ON A.ID_INDIVIDU = B.ID_INDIVIDU AND B.MAX_DTE = B.ALEG_DATE_DEM
    je ne maitrise pas trop cette technique et j'ai un petit problème donc je ne sais résoudre "mot-clé absent" en me soulignant le

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Le plus simple serait de faire une jointure avec votre sous-requête qui est actuellement dans votre WHERE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select A.ALEG_DATE_DEM 
    from AS_AIDELEG A
    where (A.ALEG_DATE_DEM, A.id_individu) = 
        (SELECT MAX(A.ALEG_DATE_DEM), B.ID_INDIVIDU 
         FROM AS_INDIVIDU B 
         WHERE A.ID_INDIVIDU =  B.ID_INDIVIDU 
         GROUP BY B.IND_NOMP, B.ID_INDIVIDU);
    avec cette requête, il m'affiche l'historique et non la date MAX

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    enlevez le as

  11. #11
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par chapidu84120 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select A.ALEG_DATE_DEM 
    from AS_AIDELEG A
    where (A.ALEG_DATE_DEM, A.id_individu) = 
        (SELECT MAX(A.ALEG_DATE_DEM), B.ID_INDIVIDU 
         FROM AS_INDIVIDU B 
         WHERE A.ID_INDIVIDU =  B.ID_INDIVIDU 
         GROUP BY B.IND_NOMP, B.ID_INDIVIDU);
    avec cette requête, il m'affiche l'historique et non la date MAX
    Vous n'avez pas compris ma remarque sur la jointure, je vous ai donné exactement le même conseil que punkoff :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select A.ALEG_DATE_DEM 
    from AS_AIDELEG A
    JOIN (SELECT MAX(ALEG_DATE_DEM) ALEG_DATE_DEM, ID_INDIVIDU 
          FROM AS_INDIVIDU
          GROUP BY ID_INDIVIDU) B
    ON A.ID_INDIVIDU = B.ID_INDIVIDU 
    AND A.ALEG_DATE_DEM = B.ALEG_DATE_DEM
    C'est le AS qui pose problème à votre requête.
    ~ Lola ~

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par punkoff Voir le message
    enlevez le as
    Merci, ca fonctionne !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/03/2015, 13h51
  2. Fonction Somme.si avec des dates
    Par Breizh22p dans le forum Excel
    Réponses: 1
    Dernier message: 13/03/2012, 14h43
  3. utilisation du calendrier pour insérer des dates dans ma BD Interbase
    Par Abou Zar dans le forum Bases de données
    Réponses: 4
    Dernier message: 22/06/2010, 07h23
  4. Utilisation fonction MIN (SQL) sur les dates
    Par fafabzh6 dans le forum SAS Base
    Réponses: 5
    Dernier message: 19/09/2008, 15h36
  5. la fonction Max/Min sur des dates
    Par chabagrou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2007, 18h38

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