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 :

[SQL] Trouver la date maximum parmis 3 dates (fonction?)


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut [SQL] Trouver la date maximum parmis 3 dates (fonction?)
    Bonjour,

    Question épineuse aujourd'hui. Dans un ordre SELECT, je doit récupérer le premier jour du mois suivant le maximum de 3 dates.

    Concretement, pour une ligne de ma table j'ai 3 dates : date1, date2 et date3. Je veux recuperer la date la plus élevé de ces 3 dates et calculer le premier jour du mois suivant.

    Pour le premier jour du mois suivant, je m'en sort avec une concaténation et quelques ADD_MONTHS avec un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date('01/'||to_char(add_months(date1,1),'MM')||'/'||to_char(add_months(date1,1),'YYYY'),'DD/MM/YYYY')

    Le problème, c'est pour récupérer le maximum des 3 dates. J'utilise des CASE (je suis en 9i) mais c'est lourd et moche.

    Si quelqu'un aurait une piste de reflexion plus propre, je suis preneur.
    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    bah pour recuperer la date maxi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(tadate) FROM tatable
    devrait suffire

    Ensuite tu utilisera un TRUNC pour trouver le premier jour du mois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT trunc(add_months(sysdate,1),'Month')
    from dual

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    C'est pas tout à fait ça : en fait je me suis mal exprimé. Dans ma table, j'ai 3 champs DATE (pour une ligne j'ai donc 3 dates différentes). Je cherche la valeur maximum de ces 3 champs

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Essaie

    SELECT MAX(date1,MAX(date2,date3))
    FROM tatable

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    non, non la commande MAX ne permet que de jouer sur les valeurs d'une même colonne (erreur ORA-00909 : Nombre d'argument incorrect avec ta proposition).

    Arf! Je sais, ce n'est pas simple

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    pardon c greatest à la place de max

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 55
    Points : 59
    Points
    59
    Par défaut
    ENORME !!!

    C'est excellent ! Ca marche de la folie. Toutes mes félicitations, j'ai appris une nouvelle fonction aujurd'hui. Je n'en avais jamais entendu parler.

    Seul bémol, lorsque l'une des date est nulle, ça ne marche plus. Ca m'a contraint à la bidouille suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GREATEST(
     DECODE(date1,NULL,TO_DATE('01/01/1900','DD/MM/YYYY'),date1),
     DECODE(date2,NULL, TO_DATE('01/01/1900','DD/MM/YYYY'), date2),
     DECODE(date3,NULL,TO_DATE('01/01/1900','DD/MM/YYYY'), date3)
     )
    Encore merci !

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    S'il s'agits de colonnes de la même ligne, vous pouvez également utiliser la fonction GREATEST(col1, col2,...,coln) qui retourne la valeur la plus élevée de la liste.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    sinon utilise la fonction NVL pour les valeurs nulle

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

Discussions similaires

  1. Fonction SQL calculabt le maximum d'une date
    Par CyberMen dans le forum SAS Base
    Réponses: 5
    Dernier message: 02/05/2012, 19h36
  2. Requête sql, trouver une date
    Par Brenlem dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/02/2012, 10h38
  3. Réponses: 10
    Dernier message: 23/11/2009, 23h49
  4. Réponses: 2
    Dernier message: 21/03/2007, 17h06
  5. PL/SQL TROUVER DATES DE PÂQUES, ASCENSION et PENTECôTE
    Par mimi_été dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/10/2004, 16h40

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