Nombre de Retard

amikove -  
 Amikove -
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

4 réponses

Utilisateur anonyme
 
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
0
amikove
 
Merci Tassin

mais j'utilise SqlServer :s
0
Utilisateur anonyme
 
Je regarde alors ;-)
0
Utilisateur anonyme
 
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
0
amikove
 
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'.
0
Amikove
 
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 !
0