签到表,统计工作时长
分类:SQL
如果你的签到表中有很多员工,并且每个员工都有多次签到记录,你可以使用以下的SQL查询语句来汇总每个员工的总时长:
SELECT
employee_id,
SUM(DATEDIFF(MINUTE, start_time, end_time)) AS total_duration
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY start_time) AS row_num,
employee_id, start_time, end_time
FROM
sign_in_table
WHERE
status IN (1, 2)
) AS t1
JOIN
(
SELECT
ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY start_time) AS row_num,
employee_id, start_time, end_time
FROM
sign_in_table
WHERE
status IN (1, 2)
) AS t2 ON t1.employee_id = t2.employee_id AND t1.row_num = t2.row_num - 1
GROUP BY
employee_id;
这个查询语句会按照员工ID(employee_id
)对签到记录进行分组,并为每个员工的每一条记录分配一个行号(row_num
)。然后,它将每个员工的相邻行号的记录进行连接,并计算它们之间的时长差值。最后,使用 SUM
函数对每个员工的时长差值进行求和,得到每个员工的总时长(以分钟为单位)。
请注意,这个查询假设每个员工的签到记录都已按照开始时间进行排序。
你需要根据实际情况进行相应的调整,并确保数据库中的表和列名与查询语句一致。