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 :

Regrouper des dates sur jour moi annee


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 Regrouper des dates sur jour moi annee
    Bonjour,

    Désolé si ma question parait simple j'ai cherché et aucune des syntaxes que j'ai essayé n'a fonctionné ou retourné ce que je souhaite... pourtant je suis persuadé qu'il y a un moyen.

    Dans une table j'ai un champ date_stat au format date.
    Le truc c'est qu'il y a n enregistrements avec des dates similaires et où juste les heures diffèrent:
    DATE_STAT
    -------------------
    18/04/2011 00:00:05
    18/04/2011 08:00:05
    18/04/2011 12:30:05
    ...
    21/04/2011 00:10:05
    21/04/2011 01:00:05
    21/04/2011 10:00:05
    ...
    22/04/2011 00:40:00
    22/04/2011 05:00:00
    ...
    Je souhaiterais pouvoir extraire uniquement les "dates", quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TO_CHAR(date_stat, 'DD/MM/YYYY') as TS FROM MA_TABLE
      GROUP BY TO_CHAR(date_stat, 'DD/MM/YYYY')
    ORDER BY TO_CHAR(date_stat, 'YYYYMMDDHH24MISS') ASC
    et obtenir un résultat tel quel:
    18/04/2011
    21/04/2011
    22/04/2011
    ...
    J'avais également essayé de faire un select UNIQUE devant le to_char mais ça n'est pas une syntaxe correcte non plus...

    L'un de vous saurait-il m'aiguiller vers la solution ?

    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
    Vous n'êtes pas très loin de la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT DISTINCT TO_CHAR(date_stat, 'DD/MM/YYYY') AS TS
        FROM MA_TABLE
    ORDER BY trunc(date_stat, 'D') asc;

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Citation Envoyé par madmaxou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TO_CHAR(date_stat, 'DD/MM/YYYY') as TS FROM MA_TABLE
      GROUP BY TO_CHAR(date_stat, 'DD/MM/YYYY')
    ORDER BY TO_CHAR(date_stat, 'YYYYMMDDHH24MISS') ASC
    Presque!
    On ne peut pas trier sur une information qu'on souhaite supprimer, à savoir les heures / minutes / secondes.
    Le mieux est de tronquer les dates pour ne garder que les jours et pour autant garder une donnée de type DATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TRUNC(date_stat, 'DAY') as TS FROM MA_TABLE
      GROUP BY TRUNC(date_stat, 'DAY')
    ORDER BY TRUNC(date_stat, 'DAY') ASC

  4. #4
    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
    Tient oui j'étais persuadé qu'Oracle remarquerait que le to_char et l'order by s'appliquent sur la même colonne, ce qui après essai ne fonctionne pas.

    La solution de xdescamp fonctionnera si votre nls_date_format et bien dd/mm/yyyy.

    Sinon il faut le convertir avec to_char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH SR AS
    (
    SELECT DISTINCT TRUNC(DATE_STAT, 'D') AS TS
      FROM MA_TABLE
    )
      SELECT TO_CHAR(TS, 'dd/mm/yyyy') AS TS
        FROM SR
    ORDER BY TS ASC;
    Ou alors avoir deux colonnes en sortie de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT DISTINCT TO_CHAR(DATE_STAT, 'DD/MM/YYYY') AS TS,
             TRUNC(DATE_STAT, 'D') AS TS_DT
        FROM MA_TABLE
    ORDER BY TS_DT ASC;

  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
    Merci beaucoup à tous les deux je vais essayer les solutions que vous proposez et basculerai ce sujet résolu le cas échéant.

    Je vais réellement devoir me pencher sur cette fonction trunc, c'est la deuxième fois qu'elle répond à un de mes besoins

  6. #6
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 56
    Par défaut
    J'ai mis un peu de temps à répondre, la solution suggérée est toutefois parfaitement fonctionnelle, je l'ai modifiée à ma sauce, comme suit, pour n'obtenir que les dates au format jour/mois/année:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT to_char(TRUNC(DATE_STAT, 'DD'), 'DD/MM/YYYY') AS TS FROM MA_TABLE
         GROUP BY TRUNC(DATE_STAT, 'DD')
      ORDER BY TRUNC(DATE_STAT, 'DD') ASC
    Merci encore

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

Discussions similaires

  1. [MySQL] Comment récupérer des données de la date actuelle(jour/mois)
    Par Aiglichon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/12/2012, 20h39
  2. [CR 7] Regrouper des enregistrements par le mois d'un champ date
    Par 2nd Floor dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 27/02/2012, 19h19
  3. calculer le nombre de jour,moi,annee entre deux dates
    Par kroma23 dans le forum Débuter
    Réponses: 2
    Dernier message: 13/12/2011, 12h49
  4. [XL-2007] calcul jour,moi,annee entre deux date
    Par kroma23 dans le forum Excel
    Réponses: 2
    Dernier message: 25/11/2011, 20h08
  5. Réponses: 5
    Dernier message: 18/10/2011, 16h51

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