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小时是个问题。
我有一个 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小时是个问题。