recherche

Maison  >  Questions et réponses  >  le corps du texte

Obtenez les employés qui ne se sont pas pointés pendant 11 jours consécutifs

<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>
P粉103739566P粉103739566475 Il y a quelques jours489

répondre à tous(1)je répondrai

  • P粉231079976

    P粉2310799762023-08-19 07:58:16

    Grâce à la fonction d'analyse LAG(), nous pouvons essayer :

    WITH cte AS (
        SELECT e.name, e.full_name,
               LAG(a.attendance_date) OVER (PARTITION BY a.employee
                                            ORDER BY a.attendance_date) AS lag_attendance_date
        FROM tabAttendance a
        INNER JOIN tabEmployee e ON e.name = a.employee
    )
    
    SELECT DISTINCT name, full_name
    FROM cte
    WHERE DATEDIFF(attendance_date, lag_attendance_date) > 11;
    

    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.

    répondre
    0
  • Annulerrépondre