我试图将员工的时间总结为我们的计时申请,如果开始和结束时间相同或者在30分钟内,则需要合并记录。
这就是我的数据:
First_Name Start_Date End_Date
EmployeeA 2015-07-23 08:00:00 2015-07-23 16:30:00
EmployeeB 2015-07-23 12:00:00 2015-07-23 08:00:00
EmployeeC 2015-08-20 08:00:00 2015-08-20 10:15:00
EmployeeC 2015-08-20 10:15:00 2015-08-20 12:00:00
EmployeeC 2015-08-20 12:30:00 2015-08-20 16:30:00
EmployeeD 2015-08-22 08:00:00 2015-08-22 10:15:00
EmployeeD 2015-08-22 16:00:00 2015-08-22 16:30:00
在上面的示例中,我希望输出看起来像是:
First_Name Start_Date End_Date
EmployeeA 2015-07-23 08:00:00 2015-07-23 16:30:00
EmployeeB 2015-07-23 12:00:00 2015-07-23 08:00:00
EmployeeC 2015-08-20 08:00:00 2015-08-20 16:30:00
EmployeeD 2015-08-22 08:00:00 2015-08-22 09:00:00
EmployeeD 2015-08-22 16:00:00 2015-08-22 16:30:00
基本上任何结束时间的记录都在30分钟内或等于同一员工的其他记录的开始时间,该条目应该被分组。
到目前为止我所拥有的是一个组合记录,如果有时间在24小时内,那么这将合并记录在我的例子中为EmployeeD,这不是我的意图。
select a.first_name, start_date, max(end_date)
from timeoff
group by unix_timestamp(start_date) DIV 17200, first_name
我认为我需要按功能分组同时使用开始和结束时间,但需要帮助确定如何执行此操作。
感谢您的协助。
答案 0 :(得分:0)
很抱歉,这不是group by指令的目的。无论您使用的语言是什么,我都建议您使用mysql。
如果您必须在mysql上执行此操作,请记住的解决方案需要进行一些更改:
shift_id
。shift_id
设置为与上一次迭代相同或一个新的自动生成的。这样做需要的工作量远远超过在应用程序代码中查找的工作量。