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

SAS Base Discussion :

Fonction SQL calculabt le maximum d'une date


Sujet :

SAS Base

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut Fonction SQL calculabt le maximum d'une date
    Bonjour,

    J'ai un problème avec la fonction Max(date).

    J'ai une table avec des données du genre:

    Id_Client Date_Statut_Demande Montant
    1 2012-01-01 100
    2 2012-02-31 200
    3 2012-03-17 300
    2 2012-03-31 150
    1 2012-02-14 50

    Ce que je désire faire c'est d'extraire les cas qui ont un statut de demande le plus récent par Id_Client. J'ai utilisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    proc sql;
    create table Base2 as
    select distinct *
    from BASE
    where BASE.datestat = (select max(x2.datestat)
                                     from BASE as x2 
    		       where x2.Id_demande = BASE.Id_demande)
     
    ;
    quit;
    run;
    Mais lorsque j'utilise cette façon de faire, il me fait une extraction de tout les cas ayant une date égale à la date la plus récente de la table au lieu de m'extraire les données ayant la date la plus récente par demande...

    Je cherche depuis hier et ne trouve pas de solution, HELP

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour,
    Je pense que tu as oublié d'agrégé par un group by:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proc sql;
    CREATE TABLE Base2 AS
    SELECT DISTINCT *
    FROM BASE
    WHERE BASE.datestat = (SELECT max(x2.datestat)
                                     FROM BASE AS x2 
    		       WHERE x2.Id_demande = BASE.Id_demande GROUP BY ID_CLIENT)
     
    ;
    quit;

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Merci pour la réponse. Effectivement, il me manquait ce bout de code mais par contre, j'ai toujours le même résultat.

    Il me fait une extraction des cas ayant une date égale à la date la plus récente de la table et non pas les données du client ayant la date la plus récentes parmis les dates de ce client

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Avec la clause HAVING, ça roule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proc sql;
         CREATE TABLE Base2 AS
         SELECT DISTINCT *
         FROM BASE
         GROUP BY ID_CLIENT
         HAVING datestat=max(datestat);
    quit;
    Cordialement,
    bdbdbd

  5. #5
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Je ne sais pas si tu tiens absolument à faire ça en SQL, mais dans ce cas précis, l'étape DATA offre plus de simplicité si la table est bien triée, avec des blocs d'observations (SET BY).
    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
    DATA work.cyberMan ;
      INPUT Id_Client $ 
            Date_Statut_Demande YYMMDD10.
            Montant ;
      FORMAT Date_Statut_Demande YYMMDDD10. ;
    DATALINES ;
    1 2012-01-01 100
    2 2012-02-28 200
    3 2012-03-17 300
    2 2012-03-31 150
    1 2012-02-14 50
    ;
    RUN ;
    PROC SORT DATA=work.cyberMan ;
      BY id_Client 
         DESCENDING Date_Statut_Demande ;
    RUN ;
    DATA work.plusRecent ;
      SET work.cyberMan ;
      BY id_Client ;
      IF FIRST.id_Client ;
    RUN ;
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 80
    Points
    80
    Par défaut
    Très bonne idée, merci infiniement

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

Discussions similaires

  1. fonction qui retourne le jour d'une date
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/08/2007, 08h41
  2. Réponses: 1
    Dernier message: 23/11/2006, 14h02
  3. Fonction DISTINCT ne fonctionne pas sur une date
    Par cramouille dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 15h42
  4. Regrouper une sélection en fonction d'un champ et d'une date
    Par 12_darte_12 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 29/03/2006, 17h12
  5. Réponses: 3
    Dernier message: 18/10/2005, 15h34

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