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 :

Problème d'un ORDER BY avec date


Sujet :

SQL Oracle

  1. #1
    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 Problème d'un ORDER BY avec date
    Bonjour,

    Je suis en train de faire des comptages sur une table et je coince au niveau de l'ordre des dates. En effet lorsque je souhaite ordonner par mois j'y arrive sans soucis avec la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_char(MaDate,'MONTH RRRR'), count(MaColonne) 
    FROM MaTable
    GROUP BY to_char(MaDate,'MONTH RRRR')
    ORDER BY to_date(to_char(MaDate,'MONTH RRRR'),'MM/RRRR')
    Par contre si je veux faire l'équivalent pour les jours de la semaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_char(MaDate,'DAY'), count(MaColonne)
    FROM MaTable
    GROUP BY to_char(MaDate,'DAY')
    ORDER BY to_date(to_char(MaDate,'DAY'),'D')
    --> ORA-01858 : Caractère non numérique trouvé à la place d'un caractère numérique ??

    En désespoir de cause j'ai essayé (sans y croire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_char(MaDate,'DAY'), count(MaColonne)
    FROM MaTable
    GROUP BY to_char(MaDate,'DAY')
    ORDER BY to_char(MaDate,'D')
    --> ORA-00979 : n'est pas une expression du GROUP BY [Ça marche pas et c'est normal]

    Avez-vous une idée pour résoudre mon problème ?

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY to_char(NEXT_DAY(SYSDATE, TO_CHAR(Madate,'DAY')), 'D')
    Sinon, rajouter la colonne de tri dans le group by.. vu que c'est la même chose

  3. #3
    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
    Merci beaucoup ça marche impec !!!

    Par contre j'ai pas trop compris pourquoi ça fait cette erreur, tu pourrais m'expliquer ?

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    plus propre serait d'éviter la double conversion!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_char(trunc(MaDate,'MM'),'MONTH RRRR'), count(MaColonne) 
    FROM MaTable
    GROUP BY trunc(MaDate,'MM')
    ORDER BY trunc(MaDate,'MM')

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    et dans le cas de DAY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT to_char(MaDate,'DAY'), count(MaColonne) 
    FROM MaTable
    GROUP BY to_char(MaDate,'DAY'), trunc(madate,'DD')-trunc(madate,'IW')
    ORDER BY trunc(madate,'DD')-trunc(madate,'IW');
    Vu que la semaine ne commence pas le même jour à New York et à Dacca, j'évite 'D' autant que possible

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Plus propre, en effet.
    Bizarrement, le problème avec le DAY ne se résout pas de la même façon

    Pour l'explication, je pense qu'oracle peut arriver à reconvertir une chaine de caractère 'Month YYYY' en date.
    Par contre convertir une chaine de caractère 'Day', il n'y arrive pas.
    Mais ça reste une supposition.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Dans le cas de mois, on peut grouper par une date (le 1er du mois), mais dans le cas de jour-de-la-semaine, on doit convertir la date en un jour de la semaine, à savoir une chaine de charactère ('Lundi').

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

Discussions similaires

  1. Problème de Order By avec les Dates
    Par vacknov dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/11/2009, 14h43
  2. Réponses: 4
    Dernier message: 13/02/2006, 19h58
  3. Problème de requête avec dates
    Par charleshbo dans le forum Access
    Réponses: 4
    Dernier message: 08/02/2006, 01h17
  4. Problème avec "Date()" en mode runtime
    Par bwalbourg dans le forum Runtime
    Réponses: 1
    Dernier message: 25/01/2006, 11h51
  5. [MySQL] Problème avec DATE SUB et INTERVAL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/01/2006, 01h36

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