如何计算蜂巢中两个日期之间的工作日数(周一至周五)?

How to calculate number of business days (Monday to friday) between two dates in hive?

hive中2个日期之间的工作日数

简单的问题但复杂的答案:)请注意,我选择周六和周日作为非工作日。
首先,您需要生成一个时间序列。然后计算系列中工作日的数量。 第 1 步 - 创建时间序列可以使用 lateral view posexplode.

创建
lateral view posexplode(split(space(datediff(t.end_dt,t.start_dt)),' ')) pe as i,x 

第 2 步 - 使用 extract(days of week timestamp_col) 函数计算既非星期六也非星期日的计数。

周日 - 1 周六 - 7

case when extract(dayofweek from day) in (1,7) then 0 else 1 end

所以,完整的代码如下所示 -

select end_date, start_date, 
sum(case when extract(dayofweek from day) in (1,7) or or to_date(start_date )=to_date(end_date) then 0 else 1 end) no_of_week_day
from (
select  end_date, start_date , date_add (t.start_date,pe.i)   as Day
from    etl.x t
        lateral view posexplode(split(space(datediff(t.end_date,t.start_date)),' ')) pe as i,x )  rs
group by end_date, start_date

I 运行 以上 SQL 示例数据。 编辑:我用 OR 子句更新了 SQL。

select flw_up_actv_dt,flw_up_dt, 总和(在(1,7)中提取(dayofweek from day)然后0 else 1结束的情况)no_of_week_day 从 ( select flw_up_actv_dt , flw_up_dt , date_add(t.flw_up_dt,pe.i) 作为一天 来自 consumer_usrs.commitments_mgexp t 侧视图 posexplode(split(space(datediff(t.flw_up_actv_dt , t.flw_up_dt)),' ')) pe as i,x ) rs 按 flw_up_actv_dt ,flw_up_dt;

分组

输出: 2020-01-02 2020-01-02 146 2020-01-03 2020-01-02 398 2020-01-03 2020-01-03 176 2020-01-04 2020-01-02 4 2020-01-04 2020-01-03 9 2020-01-04 2020-01-04 0