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