我正在寻求帮助以找到;总工作日";以及";总工作时间";在两个日期之间花费;Start_Date和End_Date。到目前为止,我只能找到两次约会之间的总时间,不包括周末。然后我将总小时数转换为天(除以24(。
今后,我需要将公共假日(如感恩节、圣诞节等(纳入其中。此外,我如何计算总工作时间(假设工作时间为上午8点至下午5点(,而不是工作天数?
我的导师给了我一个";家庭作业;使用"sequence"来查找工作日总数,但我似乎找不到。我也不确定"sequency"是要使用的实际语法,还是只是用于在线搜索的关键字。
总之,需要您的指导才能找到以下内容:
-
查找不使用date_diff 的总工作日
-
查找的总工作时间
-
如何纳入公共假日
我的编码如下:
(DATE_DIFF('hour', start_date, end_date) - (DATE_DIFF('week',start_date, end_date)*2 * 24) - ((CASE WHEN DAY_OF_WEEK(start_date) > 5 THEN 1 ELSE 0 END) * 24) - ((CASE WHEN DAY_OF_WEEK(end_date) > 5 THEN 1 ELSE 0 END) * 24)) / 24.0 AS workday_spent
谢谢你的帮助!
在此处搜索sequence
:https://prestodb.io/docs/current/functions/array.html
以下是对我有效的查询:
select count(*) as working_days, count(*)*8 as working_hours
from unnest(sequence(start_date, end_date)) t(d)
where day_of_week(d) not in (6, 7);
公共假期:
select count(*) as working_days, count(*)*8 as working_hours
from unnest(sequence(start_date, end_date)) t(d)
where day_of_week(d) not in (6, 7);
and d not in (select d from public_holidays);
正在进行的查询:
presto> select count(*) from unnest(sequence(cast('2020-01-01' as date), cast('2020-12-31' as date))) t(d) where day_of_week(d) not in (6, 7);
_col0
-------
262
(1 row)