Obtenez les employés qui ne se sont pas pointés pendant 11 jours consécutifs
P粉103739566
2023-08-18 09:31:19
<p>J'essaie d'obtenir des employés de la base de données qui n'ont pas marqué de présence pendant 11 jours consécutifs,
Pour cela, j'ai une table des employés et une table de présence, mais le problème que j'ai avec cela est qu'il n'y a aucun enregistrement dans la table de présence, alors comment puis-je obtenir</p>
<p>J'ai essayé de nombreuses requêtes, certaines d'entre elles sont les suivantes : </p>
<pre class="brush:php;toolbar:false;">SELECT e.name, e.full_name
DE l'ongletEmployé e
JOINT GAUCHE (
SÉLECTIONNER
employé, employé
MIN(attendance_date) AS first_attendance_date
DE l'ongletParticipation
GROUPER PAR employé
) ar ON e.name = ar.employé
OÙ ar.first_attendance_date EST NULL OU
N'EXISTE PAS (
SÉLECTIONNER 1
DE l'ongletParticipation
OÙ employé = e.nom
ET fréquentation_date >= ar.first_attendance_date
ET date_de présence < DATE_ADD(ar.first_attendance_date, INTERVAL 11 JOUR)
)</pré>
<p>Une autre requête :</p>
<pre class="brush:php;toolbar:false;">SELECT e.name, COUNT(a.`attendance_date`), COUNT(e.`name`) depuis l'ongletEmployee e
Onglet LEFT JOINAttendance a ON e.name = a.`employee`
OÙ a.`employé` EST NULL
GROUP BY e.`name`</pre>
<p><br /></p>
Grâce à la fonction d'analyse
LAG()
, nous pouvons essayer :La stratégie de base ici est de générer le décalage (valeur consécutive précédente) de la date de présence en CTE. Nous ne signalons alors que les salariés avec un écart de 11 jours ou plus.