我试图找出员工在4月和3月的特定周工作了多少小时。
当试图找到工作总时数(数值)时,我给出了“日期超出范围”错误。我很确定在我的选择查询中犯了一个简单的错误。有人能指出我有什么不对吗?
如果您只想获得从2015-04-05到2015-04-11的工作小时数,您将如何进行选择查询?如果我能弄清楚如何获得指定周的数字,那么这将帮助我在其他几周内我也需要查看。原谅新生儿的问题,我对SQL很陌生,只有很少的经验。
SELECT
SUM(CASE WHEN hours_worked BETWEEN dateadd(ww,-1,'2015-04-05') AND dateadd(ww,-00,'2015-04-05') THEN r.hours_worked END) AS hours_worked
SUM(CASE WHEN hours_worked BETWEEN dateadd (wk,-1,'2015-3-14') AND dateadd(wk,-0,'2015-3-20') THEN r.hours_worked END) AS hours_worked
答案 0 :(得分:0)
这是编写类似于您的查询的一种方法:
SELECT
name,
SUM(
CASE
WHEN hours_worked BETWEEN
(to_date('2015-04-05', 'YYYY-MM-DD') - interval '7 days')
AND to_date('2015-04-05', 'YYYY-MM-DD') THEN 1
ELSE 0
END
) AS number_of_records
from test
group by name
to_date
函数将字符串转换为日期。
- interval '7 days'
告诉PostgreSQL去上周。
使用上述查询中的提示,您应该能够满足您的需求。