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

PL/SQL Oracle Discussion :

Regrouper les résultats d'une requête par semaine (du lundi au lundi)


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut Regrouper les résultats d'une requête par semaine (du lundi au lundi)
    Bonjour à tous et à toutes.


    Mon problème est le suivant, j'ai besoin de faire un graphe de statistiques qui permet de visualiser un nombre de mouvement par semaine (du lundi au dimanche soir 23h59).
    Seulement voilà, faire un group by en fonction du numéro de semaine ne regroupe pas les mouvements du lundi au lundi.
    J'ai passé un certain temps a essayer de trouver une réponse à mon problème et jusqu’à présent en vain. Mais j'admet que j'ai appris le PL/SQL un peu sur le tas et j'ai probablement encore quelques lacunes dans certains domaines qui peuvent pourtant vous paraître assez basiques.

    Qui plus est, et même si c'est un problème un peu plus secondaire, c'est la date du premier mouvement de la semaine qui me sert à définir la date de la semaine dans les résultats (ex : Semaine du lundi 13 Aout = 15 mouvements). Or dans mon cas, si le premier mouvement est par exemple le mardi ça m'affichera le nombre de mouvement de la semaine à partir du mardi.
    J'aimerais que même si le nombre de mouvement ne change pas, le résultat me renvois bien celui ci en fonction du lundi !

    J'espère avoir été assez clair :/

    Merci !

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Pouvez-vous poster votre requête, et un jeu de données (avec le résultat attendu) ?

    En effet, à froid, j'aurais tendance à partir sur la piste du to_char(madate, 'IW') mais d'après votre question, c'est ce que vous faites déjà non ?
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Oui c'est ce que je fais déjà.

    Voici la requête actuellement en place
    SELECT TO_CHAR(DT,'YYYY') AS ANNEE,TO_CHAR(DT,'MM') AS MOIS,TO_CHAR(DT,'DD') AS JOUR,DT,CMPTR FROM (
    SELECT MIN(TO_DATE(TO_CHAR(DT_CRTN,'DD/MM/YYYY'),'DD/MM/YYYY')) AS DT,TO_CHAR(DT_CRTN,'WW/YYYY') AS SEMAINE,COUNT(*) AS CMPTR
    FROM HTL_DMD LEFT JOIN V_MODULESAPPS ON V_MODULESAPPS.ID_MODULE=HTL_DMD.REF_MDL GROUP BY TO_CHAR(DT_CRTN,'WW/YYYY')
    ORDER BY DT ASC )
    Pour le jeu de donnée je le ferais un peu plus tard.

  4. #4
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Que se passe-t'il si vous utilisez TO_CHAR(MaDate,'IW/RRRR') ?
    ~ Lola ~

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Les résultat correspondent déjà un peu plus à ce que je recherche
    Plus aucune semaine qui commence le samedi ou le dimanche ! EN revanche j'ai toujours des semaines qui commence le mardi/mercredi dans le cas ou je n'ai aucun mouvement le lundi/mardi.
    Concrètement quelle différence fait l'ajout du I ?

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    WW : numéro de la semaine dans l'année, de 1 à 53 (la première semaine commence le premier jour de l'année)
    IW : numéro ISO de la semaine dans l'année (1 - 53 ; le premier jeudi de la nouvelle année est dans la semaine 1)

    Plus de détail sur IW
    - une semaine commence un Lundi
    - les jours de la semaine sont numérotés de 1 à 7
    - la semaine 1 est celle qui contient le premier Jeudi de l’année
    - une semaine ISO appartient tout entière à l'une ou l'autre année
    ~ Lola ~

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Merci pour ces précisions.
    Maintenant serait t'il possible de modifier le jour de la semaine dans DT_CRTN pour qu'il corresponde toujours au premier jour de la semaine (1 en IW si j'ai bien compris) ?

  8. #8
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Je ne comprend pas pourquoi tu veux changer le jour ?

    Pourrais-tu mettre un jeu de données réel, attendu et obtenu.
    ~ Lola ~

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Voilà les données que j'obtiens actuellement
    (J'ai ajouté la colone "jour_semaine")
    ANNEE MOIS JOUR DT CMPTR JOUR_SEMAINE
    2008 06 23 23/06/2008 79 LUNDI
    2008 06 30 30/06/2008 124 LUNDI
    2008 07 07 07/07/2008 99 LUNDI
    2008 07 15 15/07/2008 48 MARDI
    2008 07 21 21/07/2008 63 LUNDI
    Et voilà ce que j'aimerais avoir

    ANNEE MOIS JOUR DT CMPTR JOUR_SEMAINE
    2008 06 23 23/06/2008 79 LUNDI
    2008 06 30 30/06/2008 124 LUNDI
    2008 07 07 07/07/2008 99 LUNDI
    2008 07 15 14/07/2008 48 LUNDI
    2008 07 21 21/07/2008 63 LUNDI
    C'est principalement de l'ordre de l’esthétisme mais ça me permettrait de directement pouvoir afficher les statistiques toutes bien alignées les lundi.

  10. #10
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par NoPr0n Voir le message
    Merci pour ces précisions.
    Maintenant serait t'il possible de modifier le jour de la semaine dans DT_CRTN pour qu'il corresponde toujours au premier jour de la semaine (1 en IW si j'ai bien compris) ?
    Pour arrondir une date DT_CRTN au lundi la précédent :

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Points : 107
    Points
    107
    Par défaut
    Ca a l'air de fonctionner à merveille
    Je vais tout de même vérifier que ça ne m'a pas changé les résultat du compteur mais a première vue je n'y vois aucune raison !
    Merci a vous !
    Je passe le sujet à "Résolu" dés que j'ai bien tout vérifié !

  12. #12
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    NEXT_DAY(madate, 'MONDAY') retourne le prochain lundi après madate.

    Peut-être que LAST_DAY() existe ? A vérifier.

    Sinon, NEXT_DAY(madate, 'MONDAY') - 7 devrait faire aussi l'affaire...
    On ne jouit bien que de ce qu’on partage.

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Que se passe-t'il si vous utilisez TO_CHAR(MaDate,'IW/RRRR') ?
    Attention aux semaines qui se situent en début et fin d'année, les formats RRRR / YYYY convertissent "bêtement" l'année du jour et non pas l'année de la semaine.
    Par exemple, le 1er janvier 2012 fait parti de la 52ème semaine de 2011.
    Il faut utiliser IW avec le format IYYY pour l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select dt
         , TO_CHAR(dt,'RRRR"W"IW') as f1
         , TO_CHAR(dt,'YYYY"W"IW') as f2
         , TO_CHAR(dt,'IYYY"W"IW') as f3
      from (select date '2012-01-01' as dt from dual);
     
        DT       F1      F2      F3
    ---------- ------- ------- -------
    2012-01-01 2012W52 2012W52 2011W52

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

Discussions similaires

  1. [AC-2007] Envoi de tous les résultats d'une requête par email
    Par m6riil dans le forum IHM
    Réponses: 1
    Dernier message: 30/04/2013, 17h25
  2. [2.x] Regrouper les résultats d'une requête suivant un champ
    Par aitiahcene dans le forum Symfony
    Réponses: 9
    Dernier message: 23/07/2012, 14h31
  3. Filtrer les résultats d'une requête par date courte
    Par Herwin78800 dans le forum Linq
    Réponses: 8
    Dernier message: 11/08/2011, 15h16
  4. Sélectionner les résultats d'une requête par date
    Par 0sef40 dans le forum Langage SQL
    Réponses: 16
    Dernier message: 19/05/2011, 08h38
  5. [MySQL] Afficher les résultats d'une requête par nombre de caractères
    Par goldenb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/08/2010, 01h01

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