如何在真/假合作伙伴中配对SQL记录

时间:2016-07-12 16:12:12

标签: mysql sql

我正在尝试根据从我的时钟导入的记录来计算班次。我知道这类问题已经一次又一次地解决了,但我的情况需要一些额外的微妙之处,我无法弄清楚或在网上找到答案。我的时钟产生如下记录:

Employee ID,Date,Time,Shift Start/End,Job ID <br/>
001,07/12/16,08:00:00 AM,TRUE,h010 <br/>
001,07/12/16,12:00:00 PM,FALSE,h010 <br/>

我希望能够计算员工ID&amp;的班次开始(TRUE)时间和班次结束(FALSE)时间之间的时差。日期和工作ID匹配。我现在可以使用下面的SQL代码来做到这一点,但是当同一个员工在同一天使用相同的工作代码时(我们经常发生这种情况),我的问题就出现了。例如,如果我有以下记录,我的代码就不够了:

Employee ID,Date,Time,Shift Start/End,Job ID <br/>
001,07/12/16,08:00:00 AM,TRUE,h010 <br/>
001,07/12/16,12:00:00 PM,FALSE,h010 <br/>
001,07/12/16,12:30:00 PM,TRUE,h010 <br/>
001,07/12/16,05:00:00 PM,FALSE,h010 <br/>

我的查询产生了4条记录:

  1. 结束时间1 - 开始时间1,4小时
  2. 结束时间1 - 开始时间2,0.5小时
  3. 结束时间2 - 开始时间1,9小时
  4. 结束时间2 - 开始时间2,4.5小时
  5. 当我只希望它返回记录1和4.我理解为什么SQL返回4条记录,但我如何迭代数据并仅对相应的shift开始和结束记录执行timediff计算,以便它们可能是总结一周的工资单?

    这可能在SQL中没有添加额外字段(以确定这是我今天完成此工作的第二/第三/第四/等时间 - 这无疑会导致数据输入和工资单错误)?

    非常感谢所有帮助!

    (我有我的时间数据表,名称不合适time_testing,两次调用 - time_testingtime_testing_1

    SELECT
      `time_testing`.`Employee ID`,
      `time_testing`.`Date`,
      `time_testing`.`In/Out`,
      `time_testing_1`.`In/Out`,
      HOUR( TIMEDIFF( `time_testing_1`.`time`,`time_testing`.`time` ) )
         + MINUTE( TIMEDIFF( `time_testing_1`.`time`, `time_testing`.`time` ) ) / 60,
      `time_testing`.`Job ID`
    FROM
      `orchard_run`.`time_testing` AS `time_testing_1`,
      `orchard_run`.`time_testing` AS `time_testing`
    WHERE
      `time_testing_1`.`Employee ID` = `time_testing`.`Employee ID`
      AND `time_testing_1`.`Date` = `time_testing`.`Date`
      AND `time_testing_1`.`Job ID` = `time_testing`.`Job ID`
      AND `time_testing`.`In/Out` = TRUE
      AND `time_testing_1`.`In/Out` = FALSE
    

0 个答案:

没有答案