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 :

Compter un nombre de modifications par jour


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut Compter un nombre de modifications par jour
    Salut à tous

    je rencontre des difficultés pour exploiter les données d'une table à évolution lente de mon entrepôt de données.

    la table se présente en gros de la façon suivante :
    ( ID , Date debut , Date fin , current_record , mon_champ )

    Il y a autant de couples (ID + Date debut ) que de valeurs différentes du champ "Mon_champ"

    ex:
    ID--Date debut--Date fin--current_record--mon_champ
    1--3/06/11--4/06/11--0--toto
    1--4/06/11--5/06/11--1--tata
    2--4/06/11--5/06/11--0--titi
    2--5/06/11--a définir--1--tritri
    1--5/06/11--a définir--1--tata

    J'aimerais avoir ce résultat :

    Date--Nbre de modif
    3/06/11--0
    4/06/11--1
    5/06/11--2

    Je ne vous propose pas mon début de travail car vous perdriez du temps à analyser ma quadruple imbrication de requête qui ne mène à rien.

    Auriez vous un début de piste ? (PL/SQL, table temporaire, une requête magique...??)

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Si j'ai bien compris, la date retenue pour le nombre de modifications est la date de fin, et ce qui vous gène est de récupérer le 0 pour le 3 juin ?

    Il vous faut une table calendrier dans votre modèle, il suffit ensuite d'une simple jointure externe pour faire le comptage.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 124
    Par défaut
    Bonjour,
    je suis désolé, mais je ne comprend pas à quoi correspond le Nbre de modif que tu souhaites afficher.
    Est-ce le nombre d'ID qui ont un enregistrement inférieur à la valeur actuelle ?
    3/06/11-->0 = 0(1 - pas avant)
    4/06/11-->1 = 1(1 au 3/06/11)+0(2 - pas avant)
    5/06/11-->2 = 1(1 au 4/06/11)+1(2 au 4/06/11)
    en comptabilisant que au 5/06/11 - on ne s'occupe pas de toutes les valeurs différentes, à savoir, on aura pas de valeur 2 pour l'ID 1 (4/06/11 + 3/06/11).

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous n'avez pas indiqué ce que vous vouliez (comment obtenez vous ce resultat ?)

    mais cette requete devrait vous donner le résultat attendu à partir de l'exemple fourni

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT
        DateDebut,
        SUM(current_record) AS NbModif
    FROM 
        MaTable
    GROUP BY DateDebut

  5. #5
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut
    Bonsoir,

    Vous n'êtes pas très clair. Vous nous indiquez les données qui doivent être restituées, mais vous n'expliquez pas ce que vous voulez obtenir.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    c'est vrai que je me suis mal exprimés, je recommence en m'appliquant et je vous montre pourquoi la requête de aieeeuuuu répond à mon besoin uniquement en apparence.

    A la base il y une base de données source dans laquelle les utilisateurs peuvent faire de l'insertion et de la modification sur le champ "Mon_Champ".

    On a mis en place un entrepôt de données alimenté par des flux ETL.
    Comme on aimerai analyser les évolutions du champ "Mon_Champ" on a fait la table suivante :
    (SRG_KEY , ID , Date debut , Date fin , current_record , mon_champ )

    avec :

    • SRG_KEY : une séquence oracle qui sert d'identifiant
    • ID : l'identifiant de ma base source
    • Date début : la date d'insertion dans mon entrepôt
    • Date fin : date à laquelle on a enregistré une version plus récente de cette enregistrement.
    • current_record : vaut 1 ou 0. 1 est la valeur la plus récente. Si Mon_Champ change, on passe 1 à 0 et on insère une nouvelle ligne dont le current_record vaudra 1.
    • Mon_Champ : permet de voir toute les valeurs prise par le champ Mon_Champ dans ma base source.

    exemple :
    ds ma base source le 4/06/11 : (ID,Mon_Champ) = (1,toto)

    Mon ETL entre en action et genere l'enregistrement suivant :
    1 , 1 , 4/06/11 , vide , 1 , toto

    Le lendemain (5/06/11), évolution en base source :
    (ID,Mon_Champ) = (1,tata)

    Mon ETL entre en action et fait 1 UPDATE + 1 INSERT :
    1 , 1 , 4/06/11 , 5/06/11, 0, toto
    2 , 1 , 5/06/11 , vide , 1 , tata

    Ce que j'aimerai avoir, c'est le nombre de champ ayant été modifié au moins une fois le tout groupé par jour.

    La requête de aieeeuuu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
        DateDebut,
        SUM(current_record) AS NbModif
    FROM 
        MaTable
    GROUP BY DateDebut
    me donne le nombre d'insertion par jour dans ma table (cad que j'ai mon résultat souhaité + les enregistrements n'ayant jamais été modifié)

    Voila, j'ai essayé d'être le plus clair possible mais je vous ré explique à volonté, merci énormément pour votre aide

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    Ca y est je tiens ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    SELECT
        Date_Debut,
        SUM(current_record) AS NbModif
    FROM 
        CHG_TABLE_PLANIFICATION
    where num_chg in
    (select num_chg from
    (
    select num_chg,count(*) from CHG_TABLE_PLANIFICATION group by num_chg having count(*) > 1
    ))
    GROUP BY Date_Debut
    order by Date_Debut
    Merci beaucoup

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Par défaut
    donc déjà merci aieeeuuuu pour ton code que j'ai juste du modifier un peu.

    Le truc c'est que je vous ai menti sur la structure de ma table. En fait elle est plutot comme ça :
    (SRG_KEY , ID , Date debut , Date fin , current_record , mon_champ1,mon_champ2,.... )

    Si il y a une modification en base source sur un des champ de type "Mon_Champ" alors on insère une nouvelle ligne dans l'entrepôt.

    La requête que j'ai posté précédemment compte en fait le nombre de modif qu'il y a eu sur les champ de type "Mon_Champ" par jour.

    J'aimerai être plus précis et pouvoir calculer par jour le nombre de modif faite sur mon_champ1, celle sur mon_champ2 etc...

    Une idée ?

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

Discussions similaires

  1. compter le nombre de produit par jours, semaines et mois
    Par kindii dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2009, 14h44
  2. Compter le nombre de visite par jour
    Par Are-no dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/02/2008, 16h37
  3. Compter le nombre de page par regroupement
    Par bondyfalat dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2006, 17h08
  4. [SQL] Nombre de connexion par jour
    Par Oberown dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/10/2005, 15h52
  5. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53

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