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 :

Nombre d'occurences dans les six derniers mois


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 21
    Points
    21
    Par défaut Nombre d'occurences dans les six derniers mois
    Bonjour à tous,

    je cale sur une requete SQL et j'aurai besoin de vos lumières. Tout d'abord je travaille avec le logiciel SAS mais ce n'est qu'un détail n'est qu'un détail.

    J'ai une base de donnée de la forme suivre :

    ID | mois | nb__commandes
    A 201304 8
    A 201302 7
    A 201205 2
    A 201201 9
    B 201304 3
    B 201303 2
    B 201207 5
    B 201206 12
    .
    .
    .

    J'aimerai obtenir une table comme celle-ci, mentionnant pour un mois donné les informations SUR 6 MOIS (ex 201304 -> 201304 et 201303 et 201302 et 201301 et 201212 et 201211)

    mois | nb_ID_distincts | nb_commandes
    201304 . .
    201303 . .
    201302 . .
    201301 . .
    201212 . .
    .
    .
    .

    "nb_ID_distincts" = nombre de clients distincts ayant passé une commande dans les 6 derniers mois

    "nb_commandes" = nombres de commandes totales lors des 6 derniers mois

    Je vous remercie par avance

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     proc SQL;
    Create table result as
    Select "201204" as mois, count(distinct ID) as Nb_IB
    From base
    Where mois in ("201304" , "201303", "201302", "201301", "201212", "201211");
    Quit;
    Comment automatiser tout cela ?

    Merci

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Quelque chose de ce genre devrait faire l'affaire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   MOIS
            ,COUNT(DISTINCT ID) AS NB_ID_DISTINCTS
            ,SUM(NB_COMMANDES) AS NB_COMMANDES
    FROM Base
    WHERE MOIS IN ('201304' , '201303', '201302', '201301', '201212', '201211')
    GROUP BY MOIS

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse. Cependant ta solution marche pour le mois 201304 mais comment automatiser pour les autres mois ? J'ai beaucoup de mois différent s et ne voudrai pas avoir a écrire des dizaines de requêtes...

    201303 -> 201303 et 201302 et 201301 et 201212 et 201211 et 201210

    201302 -> 201302 et 201301 et 201212 et 201211 et 201210 et 201209

    Etc....

    Merci

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 321
    Points : 3 749
    Points
    3 749
    Billets dans le blog
    12
    Par défaut
    Il suffit d'enlever le filtre sur le mois (WHERE MOIS IN (...)) , ainsi tu l'auras pour tous les mois.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message
    Il suffit d'enlever le filtre sur le mois (WHERE MOIS IN (...)) , ainsi tu l'auras pour tous les mois.
    je pense que tu n'as pas compris mon problème

  7. #7
    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,

    il faudra adapter avec SAS que je ne connais pas.

    Déjà il faut travailler avec des dates et non des int.

    La 1ere étape consiste à retravailler vos données mal typées ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select to_date(CAST(mois as char(6)) || '01', 'yyyymmdd'), sum( nb__commandes)
    from ma_table
    group by to_date(CAST(mois as char(6)) || '01', 'yyyymmdd')
    Une fois que l'on a ca on peut travailler avec des interval de temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with tmp as (
    select to_date(CAST(mois as char(6)) || '01', 'yyyymmdd') as dte, 
    sum( nb__commandes) as sum_cmd
    from ma_table
    group by to_date(CAST(mois as char(6)) || '01', 'yyyymmdd')
     
     
    select a.dte, sum(b.sum_cmd)
    from tmp a 
    inner join tmp b on b.dte between a.dte - interval '6' month and a.dte
    group by a.dte

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Le problème ici c'est surtout le nombre de clients distinct qui n'est pas cumulable d'une période à l'autre.

    Il vous faut une table / une vue avec l'ensemble des mois qui vous intéresse.

    SAS de mémoire ne fait que pointer sur un SGBD, savez-vous ce qui mouline derrière ? Oracle, SQL-Server, DB2... ?

Discussions similaires

  1. [2008R2] Compter le nombre d'occurence dans un mois
    Par Moana689 dans le forum Développement
    Réponses: 1
    Dernier message: 19/06/2015, 23h58
  2. Nombre de clients distincts dans les 6 derniers mois
    Par juju44 dans le forum SAS Base
    Réponses: 1
    Dernier message: 07/05/2013, 21h05
  3. [AS] Nombre d'occurences dans une string
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 26/12/2005, 15h13
  4. [W3C] Nombre de caractère dans les formulaires
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 01h37
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

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