Nombre de Retard

Bonjour tout le monde !!!!!!!!!!
Je Suis en Stage et j'aimerais calculer le nombre de retards d'un employé
On ne prend en considération un retard que quand l'employé dépasse 8:15:00.
sachant que je dispose de la base de données suivante:

MAtricule | Nom | MaDate | Etat
----------------------------------------------------------------------------------------------------------
1 | popo | 01/01/2001 08:00 | Entree
1 | popo | 01/01/2001 08:10 | Sortie
1 | popo | 01/01/2001 08:13 | Entree
2 | papa | 01/01/2001 08:15 | Entree
3 | pcpc | 01/01/2001 08:30 | Entree
1 | popo | 01/01/2001 12:00 | Sortie
2 | papa | 01/01/2001 13:00 | Sortie
3 | pcpc | 01/01/2001 13:15 | Sortie

P.S: Je travaille avec ASP.NET

voila la requete que j'ai pu faire donc si vous pouvez m'aider merci d'avance

SELECT DISTINCT MAtricule, Nom, MIN(CONVERT(datetime ,Madate, 108)) As [inf],
CONVERT(varchar(20), MaDate, 108) As [time],
FROM Matable

WHERE CONVERT(varchar, Madate, 103) = '02/01/2007'
AND readerdescription like 'Entree'
GROUP BY MAtricule, Nom, Madate
HAVING (CONVERT(varchar(20), Madate, 108)) > '08:15:00.00'

ça marche mais le problème c'est qu'elle me retourne pour un employé tous les entrées apré 08h15, é moi je veux seulement le premier
Configuration: Windows XP
Firefox 2.0.0.12

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. voila la bonne requete :)

    SELECT MAtricule, Nom, MIN(CONVERT(datetime ,Madate, 108))

    FROM Matable
    WHERE CONVERT(varchar, Madate, 103) = '02/01/2007'
    and (CONVERT(varchar(20), Madate, 108)) > '08:15:00.00'
    AND readerdescription = 'Entree'
    GROUP BY MAtricule, Nom

    est ce possible d'executer la requete pour tout un mois, pas seulment pour un seul jour donné

    alors pour chaque employé On aura...nombre de retards é aussi Le cumule des retards

    Merci beaucoup !
    1. N'ayant pas SQL Server sous la main je te propose ceci :

      SELECT *
      FROM (
      SELECT DISTINCT MAtricule, Nom, MIN(CONVERT(datetime ,Madate, 108)) As [inf],
      CONVERT(varchar(20), MaDate, 108) As [time],
      FROM Matable
      WHERE CONVERT(varchar, Madate, 103) = '02/01/2007'
      AND readerdescription like 'Entree'
      GROUP BY MAtricule, Nom, Madate
      HAVING (CONVERT(varchar(20), Madate, 108)) > '08:15:00.00'
      )
      WHERE DENSE_RANK() OVER(ORDER BY Matricule)

      Je t'invite aussi à lire le chapitre 1.7 du site suivant : https://sqlpro.developpez.com/sqlserver-2005/?page=sql
      1. Merci pour on effort...mais ca marche pas...
        la compilation donne :

        Serveur : Msg 156, Niveau 15, État 1, Ligne 10
        Syntaxe incorrecte vers le mot clé 'WHERE'.
    2. Merci Tassin

      mais j'utilise SqlServer :s
      1. Je regarde alors ;-)
    3. Bonsoir,

      Qu'utilises tu comme base de données ?

      Si tu utilises Oracle alors la solution est la suivante :

      SELECT *
      FROM (

      SELECT DISTINCT MAtricule, Nom, MIN(CONVERT(datetime ,Madate, 108)) As [inf],
      CONVERT(varchar(20), MaDate, 108) As [time],
      FROM Matable
      WHERE CONVERT(varchar, Madate, 103) = '02/01/2007'
      AND readerdescription like 'Entree'
      GROUP BY MAtricule, Nom, Madate
      HAVING (CONVERT(varchar(20), Madate, 108)) > '08:15:00.00'
      )
      WHERE ROWNUM = 1