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 :

Max a une date precise mais doit retourner aussi si dernier


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Max a une date precise mais doit retourner aussi si dernier
    J'interroge une table pour trouver le dernier poste occupé a un date précise en faisant un max sur la date d'effet du poste et valide que la date d'expiration est inférieur à la date de la fin de la période (variable). Cependant si le poste expire dans la période donc le dernier emploi, le resultat ne me retourne pas ce record. Comment puis-je coder, que s'il s'agit du dernier poste occupé, me ramener le record dans mon select.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je suppose que ton problème est que dans ce cas la date de fin est NULL. La solution classique est d'utiliser une date de "fin des temps". Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(date_fin, '9999-9-9') ;
    PS : quel est ton SGBD ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci mais mon problème est un peu différent, je veux ajouter une condition qui me ramènera un record dans le cas ou même si il ne rencontre pas les critères de la requête, si c'est le dernier record pour l'employé. Comme le poste 23145 est le dernier poste occupé par l'employé je voudrais que ce record fasse parti des records retourné par mon select. Oracle 10g
    date_lu = 24/12/2006

    pos_no empposn_effdt expdt
    employee1 23546 23/10/1990 12/11/1996
    employee1 24789 13/11/1996
    employee2 23145 23/11/2005 22/12/2006

    SELECT * FROM EMPOSN_T P WHERE EMMPOSN_EFFDT = (SELECT MAX(EMPPOSN_EFFDT) FROM EMPPOSN_T P2 WHERE ORG_CD= ORG_CD AND EMPPOSN_DT <= &DATE_LU AND EXPDT => &DATE_LU OR EXPDT IS NULL)

    ID DATE_LU = 24/12/2006 THE DATA FOR EMPLOYEE 2 WILL NOT BE RETURNED BUT I NEED IT TO BE.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    je reformule ainsi ton problème :
    - s'il n'y a pas de saisie dans le futur (postérieure à &DATE), tu veux juste le poste le + récent, sans te soucier de &DATE ; il est alors plus simple de te repérer sur la EMMPOSN_EFFDT

    - s'il y a des saisies dans le futur... il suffit de les éliminer avec EMMPOSN_EFFDT <= &DATE pour te retrouver dans le cas précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM EMPOSN_T P WHERE EMMPOSN_EFFDT = (SELECT MAX(EMPPOSN_EFFDT) FROM EMPPOSN_T P2 WHERE P.ORG_CD= P2.ORG_CD AND EMPPOSN_DT <= &DATE_LU )
    Deux remarques sur ta requête :

    - ta condition de corrélation ORG_CD= ORG_CD est toujours vraie et ne corrèle rien du tout

    - ton OR EXPDT IS NULL aurait eu besoin de parenthèses...

    ps : ORG_CD est ton identifiant d'employé ? sinon il faut que tu rajoutes une corrélation P.EMP_ID = P2.EMP_ID
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2009, 17h06
  2. Envoi e-mail automatiquement à une date precise
    Par sooprano dans le forum Langage
    Réponses: 10
    Dernier message: 23/11/2008, 21h03
  3. fonction MAX sur une date
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 08/09/2006, 14h59
  4. [oracle 9i] Max d'une date
    Par Requin15 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/06/2006, 15h09
  5. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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