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

SQL Oracle Discussion :

Formulation de requête à partir d'une date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut Formulation de requête à partir d'une date
    Bonjour,

    Je ne suis pas un expert en requêtes SQL et je tourne un peu en rond.
    Mon SGBD est Oracle 11gR1.

    Je cherche, dans une table contenant des informations de commandes, à sortir le nombre de commandes d'un type spécifique pour chaque jour à partir d'une date donnée, pour un sous-traitant précis.

    En gros je voudrais itérer cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT UNIQUE(TO_CHAR(DATECMD, 'DD/MM/YYYY')) as DATE_COMMANDE, CMD, (SELECT COUNT(*) FROM CMDSREPORT dt2 WHERE lower(dt2.CMD)='achat' AND 
          dt2.SSTRAITANT='gugus' AND
            TO_CHAR(dt2.DATECMD, 'DD/MM/YYYY') = '01/07/2010') as NB FROM CMDSREPORT dt1 WHERE
      lower(CMD)='achat' AND
        lower(SSTRAITANT)='gugus' AND
          TO_CHAR(dt1.DATECMD, 'DD/MM/YYYY') = '01/07/2010' ;
    avec comme discriminant non pas date = 01/07/2010 mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_CHAR(dt1.DATECMD, 'DD/MM/YYYY') >= '01/07/2010'
    J'ai essayé de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT UNIQUE(TO_CHAR(DATECMD, 'DD/MM/YYYY')) as DATE_COMMANDE, CMD, (SELECT COUNT(*) FROM CMDSREPORT dt2 WHERE lower(dt2.CMD)='achat' AND 
          dt2.SSTRAITANT='gugus' AND
            dt2.DATECMD = dt2.DATECMD) as NB FROM CMDSREPORT dt1 WHERE
      lower(CMD)='achat' AND
        lower(SSTRAITANT)='gugus' AND
          TO_CHAR(dt1.DATECMD, 'DD/MM/YYYY') >= '01/07/2010' ;
    mais la requête tourne infiniment et fini par planter

    Si vous avez une piste à me suggérer pour obtenir le résultat recherché je vous en remercie d'avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Je ne suis pas sûr d'avoir bien compris mais ce ne serait pas juste GROUP BY dont tu as besoin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DATECMD AS DATE_COMMANDE, COUNT(*) AS NB 
      FROM CMDSREPORT dt1 
     WHERE lower(CMD)='achat' 
       AND lower(SSTRAITANT)='gugus' 
       AND DATECMD >= to_date('01/07/2010','dd/mm/yyyy') 
     group by DATECMD
    Sinon il ne faut pas transformer la colonne date en varchar, c'est le contraire, il faut transformer '01/07/2010' en date.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut
    Ha oui, merci pour le TO_DATE effectivement je pense que c'est plus logique.

    Malheureusement la solution du GROUP BY pose problème car je dois ressortir des lignes type:
    date | commande | nombre

    J'ai une ligne par type de commande 'achat' pour le sous-traitant gugus, il peut y en avoir n par jour.

    J'aimerai savoir chaque jour, combien de commande 'achat' gugus a passé à partir du 01 juillet 2010.

    J'ai peur que dans ta solution le count ne s'applique qu'au global, alors que je ne veux compter que le cumule des commandes du jour, ou alors le count ne ressort qu'une ligne du fait du group by ?

    Merci tout de même de ton aide

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Ben le mieux c'est de tester la requête.
    Sinon oui il y aura une ligne par date d'achat avec le nombre d'achat du jour (mais pas de cumul)
    J'ai retiré du résultat la colonne CMD car tu filtres sur CMD='achat' mais si tu en as besoin, rajoute là dans le SELECT ET dans le GROUP BY.
    Comme CMD sera constante ça ne devrait pas changer le résultat de la requête.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Ben le mieux c'est de tester la requête.
    Sinon oui il y aura une ligne par date d'achat avec le nombre d'achat du jour (mais pas de cumul)
    J'ai retiré du résultat la colonne CMD car tu filtres sur CMD='achat' mais si tu en as besoin, rajoute là dans le SELECT ET dans le GROUP BY.
    Comme CMD sera constante ça ne devrait pas changer le résultat de la requête.
    J'ai bien testé la requête, effectivement j'avais du ajouter le group by CMD en plus de la date, ceci dit cela a eu l'effet que je craignais, il y a bien un groupement des dates/commandes, ce qui est positif, mais je me retrouve avec comme valeur "1" pour la partie de comptage des commandes.

    C'est pour pallier à ça que j'avais ajouté une clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE dt2.DATECMD = dt1.DATECMD
    dans une de mes tentatives, en essayant d'adjoindre à chaque ligne un comptage des commande de type achat pour ce sous-traitant correspondant à la journée en cours, mais sans succès.

    Peut-être n'est pas possible dans une seule requête ?

  6. #6
    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
    Il suffit d'utiliser la fonction de fenêtrage au lieu de l'agrégat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select datecmd as date_commande, cmd, sstraitant,
           count(*) over(partition by trunc(datecmd)) as nb 
      from cmdsreport 
     where lower(cmd) = 'achat' 
       and lower(sstraitant) = 'gugus' 
       and datecmd >= to_date('01/07/2010','dd/mm/yyyy');
    Si vous voulez exécuter votre requête sur plusieurs commandes / fournisseurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select datecmd as date_commande, cmd, sstraitant,
           count(*) over(partition by trunc(datecmd), cmd, sstraitant) as nb 
      from cmdsreport 
     where datecmd >= to_date('01/07/2010','dd/mm/yyyy');

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut
    Wahou, je ne connaissais pas, c'est super, tout à fait ce que je cherchais à obtenir !!

    Merci beaucoup

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

Discussions similaires

  1. [ODBC] Créer un requête à partir d'une plage de date
    Par razily dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/06/2010, 12h24
  2. [vbexcel]trouver le jour a partir d'une date.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2005, 16h07
  3. [D7] trouver une semaine partir d'une date
    Par raoulmania dans le forum Langage
    Réponses: 3
    Dernier message: 01/12/2005, 10h36
  4. creer plusieurs requêtes à partir d'une
    Par pixeldargent dans le forum Access
    Réponses: 8
    Dernier message: 18/10/2005, 11h44
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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