我有一个SQL表,其中包含以下员工在特定日期的滑入和滑出数据。[下面的图片链接]
我需要编写一个产生以下结果的SQL查询。[下面的图像链接]
结果表中的工作时间表示员工在该特定日期花费的总时间。 这是我试过的查询。我正在接受working_hours,但不是特定日期。
SELECT emp_card_id
, CONCAT(CAST(
CASE WHEN SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) > 86400
THEN FLOOR(
SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) / 86400 )
ELSE 0 END AS CHAR)
, ' days' ) AS working_days
, SEC_TO_TIME(MOD(
SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) , 86400 )
) AS working_hours
FROM EmpAttendance.emp_attendance
GROUP
BY emp_card_id;
答案 0 :(得分:0)
我认为你走在正确的轨道上。只需将您的日期添加到查询的SELECT部分以及GROUP BY中,以便按员工和日期进行分组:
SELECT emp_card_id, `date`
, CONCAT(CAST(
CASE WHEN SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) > 86400
THEN FLOOR(
SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) / 86400 )
ELSE 0 END AS CHAR)
, ' days' ) AS working_days
, SEC_TO_TIME(MOD(
SUM(UNIX_TIMESTAMP(out_time)
-UNIX_TIMESTAMP(in_time)) , 86400 )
) AS working_hours
FROM EmpAttendance.emp_attendance
GROUP
BY emp_card_id, `date`;