- SQL查询语句:
SELECT
employee_id,
DATE(check_in_time) AS work_date,
CASE
WHEN check_in_time IS NULL OR check_out_time IS NULL THEN NULL
ELSE TIMESTAMPDIFF(SECOND, check_in_time, check_out_time)
END AS work_duration_seconds
FROM
attendance;
- 逻辑说明:
SELECT employee_id, DATE(check_in_time) AS work_date
:从考勤记录表attendance
中选择员工ID和签到时间的日期部分,作为工作日期。
CASE WHEN check_in_time IS NULL OR check_out_time IS NULL THEN NULL ELSE TIMESTAMPDIFF(SECOND, check_in_time, check_out_time) END AS work_duration_seconds
:
- 使用
CASE
语句来处理签到或签退时间可能为NULL
的情况。
- 如果签到时间
check_in_time
或签退时间check_out_time
为NULL
,则返回NULL
,表示工作时长无法确定。
- 否则,使用
TIMESTAMPDIFF
函数计算签退时间与签到时间之间的时间差,单位为秒,以此作为实际工作时长。这里以秒为单位方便统一计算,实际应用中可根据需求转换为小时、分钟等其他时间单位。