我试图根据07:24:00:0000小时的超时因素来计算加班费
我的数据库看起来像这样
| id |user_id| starttime | endtime
| 0 | 1 | 2018-05-09 04:30:00 | 2018-05-09 017:30:00
| 1 | 1 | 2018-05-10 06:30:00 | 2018-05-10 017:30:00
| 2 | 1 | 2018-05-11 04:30:00 | 2018-05-11 015:30:00
我很难搞清楚能够完成这项工作的选择陈述 - 我希望所有人加班加点结果
我的功能现在看起来像这样:
public function getOvertimeTotal($id, $selectedMonth) {
$this->db->query("SELECT
COUNT(SUBTIME(TIMESTAMPDIFF(HOUR, starttime, endtime), '07:24:00:0000')) as overTimeTotal
FROM hours
WHERE user_id = :id
AND month(starttid) = :selectedMonth");
$this->db->bind(':id', $id);
$this->db->bind(':selectedMonth', $selectedMonth);
$row = $this->db->single();
return $row;
}
我做错了什么?
答案 0 :(得分:3)
这可以帮助您计算小时数的加班时间,
SUM((TIMESTAMPDIFF(SECOND, starttime, endtime) - TIME_TO_SEC('07:24:00:0000')) / 3600)
如果您需要及时转换的值,请从上面删除3600部分并使用SEC_TO_TIME()
函数
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, starttime, endtime) - TIME_TO_SEC('07:24:00:0000')))
答案 1 :(得分:0)
您可以尝试在子查询中计算加班时间,然后在命名结果列上进行聚合:
SELECT SUM(overtime) AS overTimeTotal
FROM (SELECT starttime - endtime AS overtime FROM tablename WHERE [...])
为简单起见,我将WHERE
部分遗漏。