我正在尝试根据从我的时钟导入的记录来计算班次。我知道这类问题已经一次又一次地解决了,但我的情况需要一些额外的微妙之处,我无法弄清楚或在网上找到答案。我的时钟产生如下记录:
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和4.我理解为什么SQL返回4条记录,但我如何迭代数据并仅对相应的shift开始和结束记录执行timediff计算,以便它们可能是总结一周的工资单?
这可能在SQL中没有添加额外字段(以确定这是我今天完成此工作的第二/第三/第四/等时间 - 这无疑会导致数据输入和工资单错误)?
非常感谢所有帮助!
(我有我的时间数据表,名称不合适time_testing
,两次调用 - time_testing
和time_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