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
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
-
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 -
Merci Tassin
mais j'utilise SqlServer :s -
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 -
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 !