我有一張表ClockIn,如下所示:
| ID | 時間戳 | 作業日編號 | 員工ID | 型別 |
|---|---|---|---|---|
| 1 | 2021-10-19 08:00:00 | 148 | 1 | 開始 |
| 2 | 2021-10-19 10:00:00 | 148 | 1 | 結尾 |
| 3 | 2021-10-19 11:00:00 | 148 | 1 | 開始 |
| 4 | 2021-10-19 08:00:00 | 149 | 2 | 開始 |
| 5 | 2021-10-19 17:00:00 | 149 | 2 | 結尾 |
該表基本上用于員工的出勤。我需要撰寫一個 SQL 腳本來找到有任何開始但忘記輸入結束時間的員工(意味著他沒有 Type=end 的行,但有開始。注意:一個員工可能有多個 Start 和 End天)。
首先,我需要找出該員工,然后我必須輸入該員工缺少的 End 行。而 End TimeSpan 將為StartTime 8hrs。
我正在使用 MySql DB,所以我正在嘗試撰寫一個 MySql 腳本。我是否需要為此使用任何臨時表或程序。我完全被困住了如何做到這一點。任何幫助將不勝感激。
uj5u.com熱心網友回復:
檢查NOT EXISTS同一天同一員工的另一條記錄,“結束”時間戳在“開始”時間戳之后
SELECT a.*
FROM ClockIn a
WHERE a.Type = 'Start'
AND NOT EXISTS (
SELECT 1
FROM ClockIn b
WHERE b.EmployeeId = a.EmployeeId
AND a.WorkDayId = b.WorkDayId
AND a.Timestamp < b.Timestamp
AND b.Type = 'End'
);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bf83dfce56500b12cc945848e94e8b9a
上面鏈接中的示例還包括INSERT用于創建“結束”記錄的陳述句,但它是否總是從“開始”增加 8 小時是一個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330800.html
下一篇:MySQL自動增量不是從1開始
