计算使用MySQL的员工的额外时间

问题描述 投票:-1回答:1

您好,我在使用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

示例:

  • 50%规则

操作员johnnyanthony在3:20 pm-4:50 pm(90分钟)开始加班。[根据规则= 90分钟50%的额外小时。][“在此处输入图像说明”] 1

  • 100%规则

运营商乔安妮(Joanne)在3:20 pm-4:50 pm(90分钟)开始加班。[根据规则= 60分钟100%的额外小时。]

enter image description here

  • 50%=>应该是100%

操作员marc在3:20 pm-4:20 pm(除夕夜60分钟)开始加班[根据规则= 60分钟100%的额外小时。]

enter image description here

我的目标:我不知道如何选择小时数并使用假期表进行计数。

mysql count
1个回答
0
投票

i复制到整列的holiday.date。然后,我可以使用FIND_IN_SET。

SELECT GROUP_CONCAT(date SEPARATOR ',') FROM holidays into @holidaydt;
© www.soinside.com 2019 - 2024. All rights reserved.