SQL员工出勤记录基于特定日期的滑入和刷出时间

时间:2017-05-22 18:09:08

标签: mysql

我有一个SQL表,其中包含以下员工在特定日期的滑入和滑出数据。[下面的图片链接]

image1

我需要编写一个产生以下结果的SQL查询。[下面的图像链接]

image2

结果表中的工作时间表示员工在该特定日期花费的总时间。 这是我试过的查询。我正在接受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;

1 个答案:

答案 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`;