我的目标是生成一份报告,为我提供数据以提交给薪资公司。
我们的付款期是从1日到15日,然后是16日到月底,我可以轻松生成一份报告,显示员工在这些日期之间工作的小时数。
我的问题是加班。加班费是根据某一周的员工工作计算的。我们的周开始和结束日期是周日到周六。以下是挑战的具体示例。
2016-01-31结束的支付期是第3,4,5和6周的一部分。第4周和第5周有七天,第3周和第6周只有一天。我想支付(在此特定支付期间)员工在第3,4和5周工作的任何加班费。我将在下周支付期间为第6周加班支付费用。
我需要一些帮助。特别是开始寻找的方向。这会是我在SELECT中嵌入SELECT的情况吗?由于我在同一数据源上进行两次不同的旋转操作......我有点困惑。
任何人都有经验吗?想法?
Report for Pay Period Ending 2016-01-31
Employee Hours OT Hr
----------------------- ------- -------
Joe Employee 95.00 1.00
- Week 3 (1 Day) 7.00 1.00
- Week 4 (7 Days) 40.00 0.00
- Week 5 (7 Days) 40.00 0.00
- Week 6 (1 Day) 8.00 0.00
此样本报告显示,在2016-01-31结束的支付期间,员工在16天内工作了96小时。加时赛的一小时和第3周的7小时常规时间表明,他们在上一个付费期间的工作时间增加了一个小时,这使得他们的第3周总时数超过40小时。
业务规则:员工加班时间为一周内超过40小时。周被定义为从星期日到星期六的时间。付款日期为付款日期。付款日期定义为每月的第15天和最后一天。如果支付期间发生在一周中。如上所述,员工在加薪日期的两个加班时间内获得报酬。
Sample Data as Requested
Employee Start End Week PayPeriod Duration
John Employee 2016-01-02 09:23:42 2016-01-02 15:13:43 1 1/15/2016 5.83
John Employee 2016-01-04 09:42:30 2016-01-04 17:58:19 2 1/15/2016 8.26
John Employee 2016-01-05 09:46:04 2016-01-05 13:30:03 2 1/15/2016 3.73
John Employee 2016-01-05 14:03:02 2016-01-05 18:06:34 2 1/15/2016 4.06
John Employee 2016-01-06 10:30:43 2016-01-06 17:14:18 2 1/15/2016 6.73
John Employee 2016-01-07 10:05:22 2016-01-07 13:43:59 2 1/15/2016 3.64
John Employee 2016-01-07 14:14:20 2016-01-07 18:05:50 2 1/15/2016 3.86
John Employee 2016-01-08 09:55:59 2016-01-08 17:47:58 2 1/15/2016 7.87
John Employee 2016-01-11 10:28:22 2016-01-11 17:54:04 3 1/15/2016 7.43
John Employee 2016-01-12 09:33:30 2016-01-12 10:08:43 3 1/15/2016 0.59
John Employee 2016-01-12 10:39:59 2016-01-12 18:29:24 3 1/15/2016 7.82
John Employee 2016-01-13 10:41:16 2016-01-13 13:39:29 3 1/15/2016 2.97
John Employee 2016-01-13 13:39:29 2016-01-13 15:05:05 3 1/15/2016 1.43
John Employee 2016-01-13 15:05:06 2016-01-13 17:25:30 3 1/15/2016 2.34
John Employee 2016-01-14 10:32:28 2016-01-14 14:01:33 3 1/15/2016 3.48
John Employee 2016-01-14 14:20:47 2016-01-14 18:07:42 3 1/15/2016 3.78
John Employee 2016-01-15 09:40:31 2016-01-15 17:19:34 3 1/15/2016 7.65
John Employee 2016-01-16 09:40:31 2016-01-16 17:19:34 3 1/31/2016 7.65
John Employee 2016-01-18 10:01:39 2016-01-18 15:40:43 4 1/31/2016 5.65
John Employee 2016-01-18 15:53:38 2016-01-18 18:38:27 4 1/31/2016 2.75
John Employee 2016-01-19 10:43:24 2016-01-19 18:13:04 4 1/31/2016 7.49
John Employee 2016-01-20 10:38:38 2016-01-20 14:16:09 4 1/31/2016 3.63
John Employee 2016-01-20 14:16:09 2016-01-20 17:55:07 4 1/31/2016 3.65
John Employee 2016-01-21 10:39:31 2016-01-21 18:56:42 4 1/31/2016 8.29
John Employee 2016-01-22 10:57:55 2016-01-22 15:44:03 4 1/31/2016 4.77
John Employee 2016-01-22 15:57:54 2016-01-22 18:11:28 4 1/31/2016 2.23
John Employee 2016-01-25 10:08:57 2016-01-25 19:14:21 5 1/31/2016 9.09
John Employee 2016-01-26 10:45:35 2016-01-26 14:17:13 5 1/31/2016 3.53
John Employee 2016-01-26 14:40:51 2016-01-26 18:31:56 5 1/31/2016 3.85
John Employee 2016-01-27 09:53:33 2016-01-27 18:05:40 5 1/31/2016 8.20
John Employee 2016-01-28 10:36:57 2016-01-28 16:28:16 5 1/31/2016 5.86
John Employee 2016-01-28 16:43:20 2016-01-28 19:42:17 5 1/31/2016 2.98
John Employee 2016-01-31 10:00:40 2016-01-31 16:27:46 6 1/31/2016 6.45
John Employee 2016-02-01 10:45:42 2016-02-01 14:04:03 6 2/15/2016 3.31
John Employee 2016-02-01 14:15:06 2016-02-01 17:45:05 6 2/15/2016 3.50
John Employee 2016-02-01 17:45:05 2016-02-01 19:01:34 6 2/15/2016 1.27
John Employee 2016-02-02 11:03:49 2016-02-02 17:40:21 6 2/15/2016 6.61
John Employee 2016-02-03 11:08:06 2016-02-03 17:15:38 6 2/15/2016 6.13
John Employee 2016-02-04 11:20:59 2016-02-04 17:27:15 6 2/15/2016 6.10
John Employee 2016-02-04 17:27:15 2016-02-04 20:19:34 6 2/15/2016 2.87
John Employee 2016-02-05 10:47:57 2016-02-05 17:53:54 6 2/15/2016 7.10
John Employee 2016-02-08 10:51:45 2016-02-08 15:15:28 7 2/15/2016 4.40
John Employee 2016-02-08 15:34:52 2016-02-08 17:30:54 7 2/15/2016 1.93
John Employee 2016-02-09 11:01:09 2016-02-09 13:11:02 7 2/15/2016 2.16
John Employee 2016-02-09 13:11:02 2016-02-09 17:38:03 7 2/15/2016 4.45
John Employee 2016-02-09 17:38:03 2016-02-09 18:34:20 7 2/15/2016 0.94
John Employee 2016-02-10 10:43:39 2016-02-10 11:25:38 7 2/15/2016 0.70
John Employee 2016-02-10 11:25:38 2016-02-10 17:58:11 7 2/15/2016 6.54
John Employee 2016-02-11 10:16:30 2016-02-11 14:06:35 7 2/15/2016 3.83
John Employee 2016-02-11 14:30:17 2016-02-11 17:25:23 7 2/15/2016 2.92
John Employee 2016-02-12 10:46:50 2016-02-12 17:46:38 7 2/15/2016 7.00
我需要在PayPeriod 2016-01-15支付5.15小时的加班时间,因为他在2015-01-15付款期结束后才超过40小时。
如果员工在2016-01-15付款期结束前超过40小时,我需要在2016-01-15和2016-01-31付款期间支付加班时间为3小时
答案 0 :(得分:0)
这是我对加班计算的看法:
你会开始检查这段时间的开始日期,那一天是什么时候?如果不是星期天,这意味着您需要为较早的日期支付一些加班费?好吧,多少天?你总是从那周的周日开始计算那一周的加班时间。这里一些有用的mySql函数是:DAYOFWEEK()和DATE_ADD()
然后你将继续直到达到/超过该期限的结束日期,并计算每周(周日至周六)的加班时间。如果星期六超过了工资核算期的结束日期,那么您只需跳过那一周的加班计算。