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 :

Recherche affectation sur une période


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut Recherche affectation sur une période
    Un petit problème de dates que je n'arrive pas à traiter

    le but est de déterminer la présence d'un employé pendant une période donnée
    Pour ce faire on dispose de 2 tables :
    la table A
    COEMP = code employé
    AFFEC = code d'affectation.
    la table B
    COEMP = code employé
    AFFECOLD = Code d'affectation précédent
    DATLIM = date de fin d'affectation à ce code

    Comment trouver l'ensemble des employés affectés à un code entre le 1/06/08 et le 30/06/08. 1 seul jour d'affectation suffit pour être présent dans cette liste.

    Quelques exemples :
    on recherche le code AFFEC = 'BB'

    table A
    COEMP = 1 AFFEC = 'BB'
    COEMP = 2 AFFEC = 'AA'
    COEMP = 3 AFFEC = 'BB'
    COEMP = 4 AFFEC = 'CC'


    Table B
    COEMP = 2 AFFECOLD = 'BB' DATLIM = '15/07/08'
    COEMP = 3 AFFECOLD = 'AA' DATLIM = '15/07/08'
    COEMP = 4 AFFECOLD = 'BB' DATLIM = '15/06/08'
    COEMP = 4 AFFECOLD = 'AA' DATLIM = '14/06/08'
    COEMP = 3 AFFECOLD = 'BB' DATLIM = '15/05/08'


    RESULTAT : COEMP = 1 doit apparaitre ... pas de changement dans table B
    donc présent
    COEMP = 2 également changement le 15/07 auparavant = 'BB'
    COEMP = 3 ne doit pas apparaitre (affecté à 'AA' pour cette période)
    COEMP = 4 doit apparaitre (présent le 15/06)

    Comment régler ce problème en langage SQL ?
    d'avance merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Salut,
    Si j'ai bien compris, tableA représente les affectations courantes et tableB représente l'historique avec une seule date par modification. Partant de ce principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select codemp
    from tableA
    where codemp not in (select codemp from tableB)
    and affec='BB'
    UNION ALL
    select codemp
    from tableB
    where affecold='BB'
    and datlim >= '01/06/08'
    Le problème de cette requête, c'est qu'elle va te renvoyer des codemp de 'BB' même si ceux-ci sont arrivés directement en 'BB' (donc pas présent dans tableB) et après le 30/06/2008.
    N'aurais tu pas une date dans tableA ?

    PS : Utilise les fonctions de conversion en format date de ton SGBD (non précisé) pour les comparaisons avec datelim.

Discussions similaires

  1. [AC-2000] Recherche enregistrement sur une période antérieure à ma sélection
    Par Christ79 dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/01/2014, 12h36
  2. [AC-2003] recherche de doublons sur une période
    Par TLImpala dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/05/2012, 23h48
  3. Réponses: 9
    Dernier message: 25/09/2008, 20h49
  4. [Oracle 8i]Recherche doublon sur une même table
    Par fmoriet dans le forum Oracle
    Réponses: 3
    Dernier message: 01/08/2006, 11h09
  5. recherche multicritères sur une requête?
    Par amélie22 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/06/2006, 12h25

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