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

Oracle Discussion :

jointure sur un calendrier : est-ce qu'une table système existe ?


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut jointure sur un calendrier : est-ce qu'une table système existe ?
    Bonjour,

    J'ai une table qui contient les données suivantes :

    CODE_CLIENT --> Identifiant du client
    DATE_HEURE --> Date et heure
    NBR_PRODUITS --> Nb de produits achetés
    MNT_PRODUITS --> Montant des produits achetés


    J'ai besoin d'exécuter une requête qui récupère les données sur un mois, agrégées par client et par jour. Ma requête se présente ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT CODE_CLIENT, TO_DATE(DATE_HEURE, 'DD/MM/YYY'), SUM(NBR_PRODUITS), SUM(MNT_PRODUITS)
    FROM SMSGEN_TEST
    WHERE TO_DATE(DATE_HEURE, 'DD/MM/YYY')>TO_DATE('01/08/2009', 'DD/MM/YYY')
    AND TO_DATE(DATE_HEURE, 'DD/MM/YYY')>TO_DATE('31/08/2009', 'DD/MM/YYY')
    AND 
    GROUP BY CODE_CLIENT, TO_DATE(DATSMS, 'DD/MM/YYY')
    Cette requête fonctionne parfaitement bien.


    Le problème c'est que j'aimerais récupérer un enregsitrement même pour chaque jour du mois où il n'a a pas de produits. En gros il faudrait faire un left join sur une table contenant tous les jours du mois.

    Ma question est la suivante : existe-t-il un table système sous Oracle qui permettrait de récupérer tous les jours du mois, où est-ce que je suis obligé de me coltiner la création d'une table Calendrier ?

    Merci d'avance

    Dany

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    je suis obligé de me coltiner la création d'une table Calendrier
    Voilà, c'est ça.
    Vous pouvez jeter un oeil ici, bien que ce soit du t-sql.

  3. #3
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Cette table n'est pas forcément très difficile à créer. Par exemple: la remplir avec les 900 derniers jours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table ...  as select trunc(sysdate)-rownum from dual connect by level <=900
    Cordialement,
    Ce pourrait être aussi simplement une vue...
    Franck.

  4. #4
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Yes pachot ! Ca me va bien ça !

    J'ai fait évolué ton principe pour récupérer les dates du mois précédent uniquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DDD
      FROM(
      SELECT trunc(sysdate)-rownum AS DDD
      FROM dual 
      connect BY level <=90
      )
      WHERE DDD BETWEEN TO_DATE('01/07/2009', 'DD/MM/YY') 
      AND TO_DATE('31/07/2009', 'DD/MM/YY')
    Et comme je ne souhaite pas créé de table (j'ai pas le choix en fait), j'ai inclue directement ce select en sous-requête et ça fonctionne super bien !

    Merci à vous deux

  5. #5
    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 vous ne pouvez pas créer de table, autant le faire au plus juste.
    Si votre point d'entrée c'est le mois en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        SELECT trunc(sysdate, 'mm') + level - 1 as DDD
          FROM dual 
    CONNECT BY level <= last_day(trunc(sysdate, 'mm')) - trunc(sysdate, 'mm') + 1;
    Et attention à vos format de date, vous n'en avez pas écrit un seul de correct en deux posts !

  6. #6
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Qu'est ce qu'ils ont mes formats de date ?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/01/2010, 14h44
  2. Test est-ce qu'une table existe
    Par jyvaut75 dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/08/2007, 21h08
  3. Actions sur des div à l'intérieur d'une table
    Par Luke58 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/06/2007, 08h53
  4. Réponses: 39
    Dernier message: 11/01/2007, 11h31
  5. Une table qui existe mais qui est inconnu! ?
    Par Nino dans le forum InterBase
    Réponses: 6
    Dernier message: 13/06/2003, 11h47

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