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

Langage SQL Discussion :

Recupération en fonction de la date


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut Recupération en fonction de la date
    Voila, j'ai une table qui contient plusieurs sociétés et leur date de mise en services.

    Je souhaiterais recuperer celle dont la date est la plus proche de la date du jour.


    Je n'arrive pas à utiliser les fonctions MAX et HAVING MAX ...

    POuvez-vous m'aider, je n'ai pas réussi à trouver de cas similaire dans le forum ...

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Citation Envoyé par Antichoc
    Je souhaiterais recuperer celle dont la date est la plus proche de la date du jour.
    Tu veux dire la date la plus récente ? ou bien cette date peut être postérieure à la date du jour ?
    Le code suivant répond aux deux possibilités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select  ID
    from    MATABLE    as T
    where   exists
            (    select  1
                from    MATABLE    as D
                having  abs(current_date - T.MADATE) = min(abs(current_date - D.MADATE))
            )    
    ;

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci pour ta réponse, mais cela ne fonctionne pas.

    Effectivement, je cherche à recuperer 1 et 1 seul enregistrement qui a :

    * Une date inferieure ou égale à la date du jour
    * Que cette date soit la plus récente possible (par rapport à la date du jour)

    J'avais essayé la requete ci-dessus mais il manque le GROUP BY pour le having, je vais rechercher.

    Si tu as d'autres infos ... merci d'avance

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    La requête peut donc être simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  ID
    from    MATABLE    as T
    where   exists
            (   select  1
                from    MATABLE    as D
                where   D.MADATE <= current_date
                having  T.MADATE = max(D.MADATE)
            )    
    ;
    Quant au GROUP BY, il n'est pas nécessaire puisque tu regroupes sur toute la table.

    Si toutefois ton SGBD (que tu as omis de préciser) n'accepte pas cette forme, tu peux aussi poser la requête comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select  ID
    from    MATABLE    as T
    where   T.MADATE =
            (   select  max(D.MADATE)
                from    MATABLE    as D
                where   D.MADATE <= current_date
            )    
    ;

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci ca roule !!!


    Effectivement, j'ai oublié : je travaille sur un environnement MAINFRAME DB2


    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2009, 12h28
  2. Fonctions sur les dates
    Par Neuromancien2 dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 10h13
  3. Réponses: 2
    Dernier message: 03/10/2005, 12h00
  4. Affichage d'évènements en fonction de leur date ?
    Par swirtel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/05/2005, 10h30
  5. Trier les enregistrements en fonction de la date
    Par mpereg dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 12/09/2004, 14h16

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