Postgresql 如何计算涵盖多周的两个日期之间的每周平均小时数?

Postgresql 如何计算涵盖多周的两个日期之间的每周平均小时数?,postgresql,datetime,Postgresql,Datetime,Postgresql 8.4 我对这个概念还不熟悉,所以如果人们能教我,我会很感激的 对于奥巴马医改,任何每周工作30小时或以上的人都必须获得与任何其他工人相同的医疗保健。我们负担不起,所以我们必须限制临时工和兼职人员的工作时间。这影响着整个国家 我需要计算工作时间(如果加班不重要, 两个日期之间的固定时间、双倍时间等,如2014年1月1日, 2014年11月1日(星期六)为每个自定义周(周日),而不是Postgresql定义的周(周一开始) 我的每个定制工作周从周日开始,到周六结束 我不知道我

Postgresql 8.4

我对这个概念还不熟悉,所以如果人们能教我,我会很感激的

对于奥巴马医改,任何每周工作30小时或以上的人都必须获得与任何其他工人相同的医疗保健。我们负担不起,所以我们必须限制临时工和兼职人员的工作时间。这影响着整个国家

  • 我需要计算工作时间(如果加班不重要, 两个日期之间的固定时间、双倍时间等,如2014年1月1日, 2014年11月1日(星期六)为每个自定义周(周日),而不是Postgresql定义的周(周一开始)
  • 我的每个定制工作周从周日开始,到周六结束
  • 我不知道我是否必须包括几周的时间 它们在平均水平上根本不起作用,但假设我起作用。那一周的零小时将使平均数下降
  • 表名为'employeetime',日期字段为'employeetime.stopdate',每天工作小时数在'employeetime.hours'字段中,employeeid字段为'employeetime.empid'
  • 我更愿意在每个员工一个查询中执行此操作,并且在遍历员工时,我将每个员工执行一次查询。如果不是,我愿意接受建议。但我想理解答案中的SQL
  • 目前,
    EXTRACT(从'2014-01-01'开始的一周)
    将一周的开始计算为星期一,因此这对我不起作用 如果不这样做,比如每周每人单独查询一次,我该怎么做?我们有200人要处理


    谢谢。

    我已设置了一个表格以匹配您的格式:

    select * from employeetime order by date;
    
    id date       hours
    1  2014-11-06 10
    1  2014-11-07 3
    1  2014-11-08 5
    1  2014-11-09 3
    1  2014-11-10 5
    
    你可以通过轮班来获得从周日开始的一周。注意,这里的9号是星期天,所以这是我们想要的边界

    select *, extract(week from date + '1 day'::interval) as week
    from employeetime
    order by week;
    
    id date       hours week
    1  2014-11-07 3     45
    1  2014-11-06 10    45
    1  2014-11-08 5     45
    1  2014-11-09 3     46
    1  2014-11-10 5     46
    
    现在,一周的时间是周日而不是周一。从这里开始,查询每周/员工的小时数将非常简单:

    select id, sum(hours) as hours, extract(week from date + '1 day'::interval) as week 
    from employeetime 
    group by id, week
    order by id, week;
    
    id hours week
    1  18    45
    1  8     46
    

    谢谢你调查这件事。看起来很有效!只是好奇为什么你在一周中增加了一天,而不是减少了一天。@Bullrush在周日中增加一天会将其转换为一周的交叉。如果我减去一天,一周的开始时间应该是星期二。