我试图弄清楚如何计算已经或需要支付的考勤卡账单上的加班时间。问题是账单涵盖了超过一周的时间,并且查询一次获取了多个员工的历史记录。关于如何做到这一点的任何建议,也许是某种案例陈述?
例如,假设在我的员工列表中,一个人每周工作 39 小时,下一个工作 45 小时。该账单将显示 84 小时的工作时间,并且还需要显示 5 小时的加班时间(而不是 4 小时!)。这需要在以下查询的上下文中完成,该查询处理多个账单和多个员工。
请注意,下面的查询显示了如果计费周期仅为一周,这将如何工作。
select
username,
CASE
WHEN paidOn IS NULL THEN 'Unpaid'
ELSE paidOn
END as paid,
round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600,2) AS hours
, CASE
WHEN round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600,2) > 40
THEN round((sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600 - 40) * payrate + 40 * payrate,2)
ELSE
round(sum(TIME_TO_SEC(TIMEDIFF(timeOut, timeIn)))/3600 * payrate, 2)
END as pay
from
timecard
LEFT JOIN
employees
ON
employees.userID = timecard.userID
WHERE
paid != 'd'
GROUP BY
paidOn, timecard.userID
ORDER BY
paid DESC
LIMIT 30;