您好,我在使用SQL为MariaDB中的员工计算额外的小时时遇到问题...我根据以下规则加班管理:
::规则::
=额外支付50%:MON-SAT 6-22 [确定]
== 100%Extra:MON-SAT 22-6 [ok]
星期日和节假日00-00(从假日表中的星期日为银行假日)[KO,不工作]
两个表:
hours (id, operator, datetime, time_worked)
holidays (id, date, dt_start, dt_end)
sql查询:
set @foo="marc";
select id, '6-22' as "busineshours", operator,
datetime as 'start',
TIME_FORMAT(datetime, '%H:%i:%s') as "START",
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') as "STOP",
time_worked*60 as "time_worked_min",
#100%
case when (
(
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') BETWEEN TIME('22:00:00') and TIME('23:59:59')
or
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') BETWEEN TIME('00:00:00') and TIME('05:59:59')
)
and
(
TIME_FORMAT(datetime, '%H:%i:%s') BETWEEN TIME('22:00:00') and TIME('23:59:59')
or
TIME_FORMAT(datetime, '%H:%i:%s') BETWEEN TIME('00:00:00') and TIME('05:59:59')
)
)
then time_worked*60
else
case when
(
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') BETWEEN TIME('22:00:00') and TIME('23:59:59')
or
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') BETWEEN TIME('00:00:00') and TIME('05:59:59')
)
then
round(TIME_TO_SEC(timediff(DATE_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%Y-%m-%d %H:%i:%s'),DATE_FORMAT(datetime, "%Y-%m-%d 21:59:59")))/60)
else
0
end
end
as "100%",
#50%
case when
TIME_FORMAT((DATE_ADD(datetime, INTERVAL time_worked*60 MINUTE)), '%H:%i:%s') BETWEEN TIME('06:00:00') and TIME('21:59:59')
and
TIME_FORMAT(datetime, '%H:%i:%s') BETWEEN TIME('06:00:00') and TIME('21:59:59')
then time_worked*60
else
case when
TIME_FORMAT(datetime, '%H:%i:%s') BETWEEN TIME('06:00:00') and TIME('21:59:59')
then
TIME_FORMAT(timediff('21:59:59',TIME_FORMAT(datetime, '%H:%i:%s')), '%i')
else
0
end
end
as "50%"
from hours
where
counted = 0
and
operator = @foo
示例:
操作员johnnyanthony在3:20 pm-4:50 pm(90分钟)开始加班。[根据规则= 90分钟50%的额外小时。][] 1
运营商乔安妮(Joanne)在3:20 pm-4:50 pm(90分钟)开始加班。[根据规则= 60分钟100%的额外小时。]
操作员marc在3:20 pm-4:20 pm(除夕夜60分钟)开始加班[根据规则= 60分钟100%的额外小时。]
我的目标:我不知道如何选择小时数并使用假期表进行计数。
i复制到整列的holiday.date。然后,我可以使用FIND_IN_SET。
SELECT GROUP_CONCAT(date SEPARATOR ',') FROM holidays into @holidaydt;