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 :

Requêtes sur des intervalles de dates


Sujet :

Langage SQL

  1. #1
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut Requêtes sur des intervalles de dates
    Bonjour,

    j'aimerais avoir votre avis sur la requête suivante, particulièrement si elle permet de réaliser ce que je veux (faire un jeu d'essai sur les dates ce sera très long).
    J'ai une table T_EMPLOYE_EMP (EMP_ID, EMP_DATE_DEB_T, EMP_DATE_FIN_T) avec EMP_DATE_FIN_T nullable qui permet de recenser des périodes de travail de salariés (par exemple un salarié travaille sur un projet du 10/5 au 20/6).

    En ayant deux dates en entrées (généralement les dates de début de mois @debMois et de fin de mois @finMois mais pas toujours...), j'aimerais avoir tous les employés qui ont travaillé sur cette période.

    Y'a-t-il des fonctions pour travailler sur les intervalles de date ? Y'a-t-il moyen de se passer de l'union ?

    Ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT EMP_ID
    FROM T_EMPLOYE_EMP
    WHERE EMP_DATE_DEB_T < @dateFinMois
    AND EMP_DATE_FIN_T IS NULL
    UNION
    SELECT EMP_ID 
    FROM T_EMPLOYE_EMP
    WHERE @dateDebutMois BETWEEN EMP_DATE_DEB_T AND EMP_DATE_FIN_T
    OR @dateFinMois BETWEEN EMP_DATE_DEB_T AND EMP_DATE_FIN_T
    OR (@dateDebutMois < EMP_DATE_DEB_T AND @dateFinMois > EMP_DATE_FIN_T)
    Merci par avance.

    @+

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    le SGBD est MySQL (5.5) (désolé de l'oubli).

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En ayant deux dates en entrées (généralement les dates de début de mois @debMois et de fin de mois @finMois mais pas toujours...), j'aimerais avoir tous les employés qui ont travaillé sur cette période.
    Le "mais pas toujours" m'incite à changer le nom de tes variables en entrée en "@dateDebut" et "@dateFin".

    Une personne qui a travaillé durent une période définie par une date de début et une date de fin est une personne qui :
    1) a commencé à travailler durant cette période ;
    2) a fini de travailler durant cette période ;
    3) a commencé avant cette période et n'a pas encore fini ou a fini après.

    Il suffit donc d'enchaîner ces conditions de restrictions dans le WHERE de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT EMP_ID
    FROM T_EMPLOYE_EMP
    WHERE EMP_DATE_DEB_T BETWEEN @dateDebut AND @dateFin
        OR EMP_DATE_FIN_T BETWEEN @dateDebut AND @dateFin
        OR 
        (
            EMP_DATE_DEB_T < @dateDebut 
            AND 
            (
                EMP_DATE_FIN_T IS NULL
                OR EMP_DATE_FIN_T > @dateFin
            )
        )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    effectivement le "mais pas toujours" c'est pour la maintenance de l'application, si modification la-dessus il y a.
    Merci pour ta réponse, je vais regarder cela et je te dis !

    EDIT : Tip top ! merci !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/06/2015, 20h46
  2. Problème d'index ignoré sur des intervalles de dates
    Par Sebajuste dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/06/2013, 10h27
  3. Réponses: 3
    Dernier message: 04/04/2013, 21h02
  4. requête sur un intervale de date
    Par hi-wave dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/06/2012, 20h23
  5. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 14h14

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