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 :

Compter le nombre d'absences dans une requête SQL


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de Issam
    Inscrit en
    Mars 2002
    Messages
    578
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2002
    Messages : 578
    Points : 604
    Points
    604
    Par défaut Compter le nombre d'absences dans une requête SQL
    bonjour
    supposons que j'ai cette table de pointage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE POINTAGE (
        ID_POINTAGE    INTEGER NOT NULL,
        PO_ID_SALARIE  INTEGER, /* clé étrangère */
        PO_ENTREE      TIMESTAMP,
        PO_SORTIE      TIMESTAMP
    );
    et la table salariés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE SALARIES (
        ID_SALARIE            INTEGER NOT NULL,
        SAL_NOM               VARCHAR(100),
        SAL_PRENOM            VARCHAR(100)
    )
    je compte le nombre de jours travaillé pour chaque salarié j'utilise cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT po.po_id_salarie, sal.sal_nom, sal.sal_prenom, count(DISTINCT (cast (po_entree AS date))) FROM pointage po
    JOIN salaries sal ON po.po_id_salarie= sal.id_salarie
     
     
     
    WHERE cast(po_entree AS date) BETWEEN :d1 AND :d2
    AND NOT po_sortie IS NULL
    GROUP BY 1,2,3
    maintnant est t'il possible de compter le nombre d'absences dans cette même requette ?

    merci et bonne journée !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    2 pistes possibles

    une avec les jointures externes, l'autre avec NOT EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Sal.ID_SALARIE,
           Sal.Sal_nom,
           Sal.Sal_prenom,
      FROM Pointage Po
        RIGHT JOIN Salaries Sal ON Po.Po_id_salarie = Sal.Id_salarie
    WHERE Po.Po_id_salarie IS NULL
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Ca me semble difficile si vous n'avez pas de table de planning

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(DISTINCT (cast (po_entree AS date)))
    Quel est l'intérêt de caster une colonne en date juste pour la compter ?

    Sinon effectivement il va falloir gérer un calendrier.
    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 confirmé Avatar de Issam
    Inscrit en
    Mars 2002
    Messages
    578
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2002
    Messages : 578
    Points : 604
    Points
    604
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(DISTINCT (cast (po_entree AS date)))
    Quel est l'intérêt de caster une colonne en date juste pour la compter ?
    parceque le salarié peut pointer plusieurs fois dans la journée et PO_ENTREE est de type Timestamp

    sinon merci pour vos propositions, je vais essayer de réfléchir maintenant plus sérieusement

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    2 pistes possibles

    une avec les jointures externes, l'autre avec NOT EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Sal.ID_SALARIE,
           Sal.Sal_nom,
           Sal.Sal_prenom,
      FROM Pointage Po
        RIGHT JOIN Salaries Sal ON Po.Po_id_salarie = Sal.Id_salarie
    WHERE Po.Po_id_salarie IS NULL
    Là on est plutôt en train de chercher les salariés qui n'ont jamais pointé, pas les jours d'absence.
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    certes oui mais isam ne parlait que 2 tables; aussi la recommandation de punkoff d'avoir une table planning est judicieuse (mais cela ne gère pas les personnes présentes mais qui ne pointent pas, ou mal)
    Merci d'ajouter un sur les tags qui vous ont aidé

Discussions similaires

  1. compter le nombre d'enregistrements dans une requete sql
    Par nassing dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/08/2011, 13h48
  2. [AC-2000] Création d'une requête pour compter le nombre de ok dans une ligne
    Par yassine06 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 16h10
  3. Réponses: 4
    Dernier message: 24/11/2008, 09h43
  4. [MySQL] Connaitre le nombre de "rows" dans une requête de type SELECT ?
    Par dagra dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/11/2006, 22h44
  5. Compter le nombre de lignes d'une requête sélection
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/07/2006, 12h11

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