11 日間連続して出勤していない従業員を取得する
P粉103739566
2023-08-18 09:31:19
<p>11 日間連続して出勤をマークしていない従業員をデータベースから取得しようとしています。
このために、従業員テーブルと出席テーブルがありますが、これに関する問題は、出席テーブルにレコードがないため、どうすれば </p> を取得できるかということです。
<p>多くのクエリを試しましたが、その一部は次のとおりです。 </p>
<pre class="brush:php;toolbar:false;">SELECT e.name、e.full_name
FROMタブ社員e
左結合 (
選択する
従業員、従業員
MIN(出席日) AS 最初の出席日
タブから出席
GROUP BY 従業員
) ar ON e.name = ar.employee
WHERE ar.first_attendance_date が NULL または
存在しない (
選択1
タブから出席
WHERE 従業員 = e.name
AND 出席日 >= ar.first_attendance_date
AND 出席日 < DATE_ADD(ar.first_attendance_date、間隔 11 日)
)</pre>
<p>別のクエリ:</p>
<pre class="brush:php;toolbar:false;">SELECT e.name, COUNT(a.`attendance_date`), COUNT(e.`name`) from tabEmployee e
LEFT JOIN タブ出席 a ON e.name = a.`employee`
WHERE a.`employee` は NULL
GROUP BY e.`name`</pre>
<p><br /></p>
リーリーLAG()
分析関数を使用して、次のことを試すことができます:ここでの基本戦略は、CTE の出席日のラグ (以前の連続値) を生成することです。その後、11 日以上の空白期間がある従業員のみを報告します。