Erhalten Sie Mitarbeiter, die sich an 11 aufeinanderfolgenden Tagen nicht angemeldet haben
P粉103739566
P粉103739566 2023-08-18 09:31:19
0
1
456
<p>Ich versuche, Mitarbeiter aus der Datenbank zu ermitteln, die an 11 aufeinanderfolgenden Tagen keine Anwesenheitsliste angezeigt haben. Dafür habe ich eine Mitarbeitertabelle und eine Anwesenheitstabelle, aber das Problem dabei ist, dass es keinen Datensatz in der Anwesenheitstabelle gibt. Wie kann ich also </p> <p>Ich habe viele Abfragen ausprobiert, einige davon lauten wie folgt: </p> <pre class="brush:php;toolbar:false;">SELECT e.name, e.full_name VON tabMitarbeiter e LINKS BEITRETEN ( WÄHLEN Angestellter, Angestellter MIN(Anwesenheitsdatum) AS erstes_Anwesenheitsdatum VON tabAnwesenheit GROUP BY-Mitarbeiter ) ar ON e.name = ar.employee WO ar.first_attendance_date NULL IST ODER EXISTIERT NICHT ( WÄHLEN 1 VON tabAnwesenheit WO Mitarbeiter = e.name AND attendance_date >= ar.first_attendance_date AND attendance_date < DATE_ADD(ar.first_attendance_date, INTERVAL 11 DAY) )</pre> <p>Eine weitere Abfrage:</p> <pre class="brush:php;toolbar:false;">SELECT e.name, COUNT(a.`attendance_date`), COUNT(e.`name`) from tabEmployee e LEFT JOIN tabAttendance a ON e.name = a.`employee` WO a.`employee` NULL IST GROUP BY e.`name`</pre> <p><br /></p>
P粉103739566
P粉103739566

Antworte allen(1)
P粉231079976

使用 LAG() 分析函数,我们可以尝试:

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;

这里的基本策略是在 CTE 中生成出勤日期的 lag(前一个连续值)。然后我们只报告有 11 天或更长间隔的员工。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!