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 :

Problème avec une "Requête de Pointage"


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut Problème avec une "Requête de Pointage"
    Bonjour,
    Je n'arrive pas à concevoir une requête pour mon application.
    Voilà mes tables:
    1.Table user :

    Matricule Nom Prenom Structure

    2.Table Mouvement:

    Matricule Date HDebut HFin
    3. La table Modèle Horaire est une nouvelle table qu'on vient d'introduire dans la base de données

    ModeleHoraire:


    CodeModHor LibelleModHor HDebModel HFinModel NbreHeure_J

    4. Et pour affecter ces modèles aux utilisateurs on a introduit une autre table :
    AffectationUserSectHor


    Matricule CodeModHor NbreJr DateDebAff DateFinAff NbreJr

    Auparavant ma requête récupérait les retards normalement dans une plage de temps, mais là mon souci c'est que chaque modèle a sa propre heure d'entrée et heure de sortie et dans une plage de temps A -D une personne X peut avoir modèle 1 de A à B ,modèle 2 de B à D ainsi de suite.


    Donc SVP si quelqu'un peut m'aider
    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La demande n'est pas très claire, le but est il de collecter les écarts de pointage (au sens pointage des employés dans une entreprise) par rapport à des plages fixes d'activité ?

    Pour bien répondre il faudrait préciser la base de données, quels sont les index, les attributs des colonnes (format, nullable ou non, longeur...) et les règles de gestion à appliquer

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    C'est pour gérer les retards et les heures de travail des employés. On veut avoir comme "État de Sortie" en lançant une Recherche de Date I à Date J.
    Mon problème est que pendant cette période la personne peut avoir deux modèles, pas au même temps, mais de date I à I+1 modèle Horaire A et de date I+1àa date J modèle Horaire B
    et chaque Modèle Horaire a comme propriété Heure Début et Heure Fin.
    Je n'ai pas de table index, ma BDD jusque-là n'a que des tables simples.

  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
    Bonjour,

    1.Table user :

    Matricule Nom Prenom Structure
    Je suppose que Matricule est la clé primaire de la table, ce qui n'est peut-être pas un choix idéal mais passons...

    2.Table Mouvement:

    Matricule Date HDebut HFin
    Ici, la clé primaire est probablement le couple {Matricule, Date} ?

    ModeleHoraire:


    CodeModHor LibelleModHor HDebModel HFinModel NbreHeure_J
    Clé primaire : CodeModHor ?
    Pourquoi y a t-il la colonne NbreHeure_J alors que cette donnée semble pouvoir être calculée à partir de HDebModel et de HFinModel ?

    AffectationUserSectHor


    Matricule CodeModHor NbreJr DateDebAff DateFinAff NbreJr
    Cette fois la clé primaire est bien difficile à trouver ! A priori, cela pourrait être le triplet {Matricule, CodeModHor, DateDebAff} ?
    Pourquoi y a t-il deux fois NbreJr dans votre description ?
    Là aussi, cela semble être une donnée calculable donc inutile à stocker en BDD.

    Attaquons maintenant au problème...

    1) Quel horaire doit faire le matricule 1001 le 14/01/2015 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.HDebModel, m.HFinModel
    FROM ModeleHoraire m
    INNER JOIN AffectationUserSectHor a ON a.CodeModHor = m.CodeModHor
    WHERE a.Matricule = 1001
        AND '2015-01-14' BETWEEN a.DateDefAff AND a.DateFinAff
    2) Quel horaire a fait le matricule 1001 le 14/01/2015 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT HDebut, Hfin
    FROM Mouvement
    WHERE Matricule = 1001
        AND Date = '2015-01-14'
    3) Quel est le décalage d'horaire du matricule 1001 le 14/01/2015 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT m.HDebModel, m.HFinModel,
        mt.HDebut, mt.Hfin,
        mt.Hdebut - HDebModel AS Retard_Debut,
        mt.Hfin - HFinModel AS Retard_Fin,
        m.HFinModel - m.HDebModel AS Nb_Heures_Prevues,
        mt.Hfin - mt.Hdebut AS Nb_Heures_Effectuees,
        mt.Hfin - mt.Hdebut - m.HFinModel + m.HDebModel AS Heures_supplementaires
    FROM Mouvement mt 
    INNER JOIN AffectationUserSectHor a 
        ON mt.Matricule = a.Matricule
            AND mt.Date BETWEEN a.DateDefAff AND a.DateFinAff
        INNER JOIN ModeleHoraire m
            ON a.CodeModHor = m.CodeModHor
    WHERE m.Matricule = 1001
        AND m.Date = '2015-01-14'
    À tester
    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 !

Discussions similaires

  1. [WD14] Problème avec une sous requête
    Par Raptor92 dans le forum WinDev
    Réponses: 4
    Dernier message: 13/04/2010, 13h54
  2. Réponses: 2
    Dernier message: 02/04/2008, 09h59
  3. [POO] Problème avec une classe + requêtes sql
    Par mithrendil dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2007, 08h27
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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