根据班次计算总工时

时间:2014-08-19 08:23:29

标签: postgresql

我想根据此表中的信息计算每位员工在一段时间内工作了多少小时:

       start              employee_id

2014-08-10 18:10:00             5  
2014-08-10 13:30:00             7  
2014-08-10 09:00:00             7  
2014-08-09 23:55:00             4  
2014-08-09 16:23:00             12  
2014-08-09 03:59:00             9  
2014-08-08 20:05:00             7  
2014-08-08 13:00:00             8  

每位员工都会替换另一名员工及其工作所在的地方,因此没有空位。

所需的结果格式如下:

employee_id         total_minutes_worked

我试图想出实现这一目标的最佳方式,所以任何帮助都将受到赞赏!

2 个答案:

答案 0 :(得分:2)

您可以将总时间视为:

select employee_id, sum(stop - start) 
from (
    select start, lead(start) over (order by start) as stop, employee_id
    from t
) as x 
group by employee_id;

仍然要格式化时间,但我认为这不是什么困扰你

答案 1 :(得分:0)

您应该使用'GroupBy'子句首先创建一个具有相同员工ID的组

比你应该通过检查每个插槽的工作开始时间和工作结束时间来计算时间。

(注意 - 您应该保留班次每个位置的员工的开始时间和结束时间)