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

  1. 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
    1. Merci Tassin

      mais j'utilise SqlServer :s
      1. Je regarde alors ;-)
    2. 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'.
    3. 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 !