MySQL 用于查找特定组中缺失条目的脚本,然后在该组中输入缺失的行

MySQL Script for find finding missing entry from a specific group and then enter the missing row on that group

我有一个 table ClockIn 如下:

Id TimeStamp WorkDayId EmployeeId Type
1 2021-10-19 08:00:00 148 1 Start
2 2021-10-19 10:00:00 148 1 End
3 2021-10-19 11:00:00 148 1 Start
4 2021-10-19 08:00:00 149 2 Start
5 2021-10-19 17:00:00 149 2 End

table主要用于员工出勤。我需要写一个 SQL 脚本来找到有任何 start 但忘记输入 end 时间的员工(意味着他没有 Type=end 的行,但有开始。注意:一名员工可能在同一天有多个开始和结束)。

首先,我需要找出该员工,然后我必须输入该员工缺少的 End 行。结束时间跨度将为 StartTime + 8hrs.

我正在使用 MySql 数据库,所以我正在尝试编写一个 MySql 脚本。我是否需要为此使用任何临时 table 或程序。我完全不知道该怎么做。如有任何帮助,我们将不胜感激。

查看同一员工的另一条记录,同一天,“结束”时间戳在“开始”时间戳之后

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

上面的例子link也包含了一个INSERT创建“结束”记录的语句,但是否总是从“开始”开始加8小时是个问题。