首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在bigquery中的两个日期列之间找到业务天数?

如何在bigquery中的两个日期列之间找到业务天数?
EN

Stack Overflow用户
提问于 2020-10-12 14:36:46
回答 2查看 1K关注 0票数 0

这似乎很简单,但我无法在线找到解决方案(不使用函数)。我正在使用bigquery,希望找到两天之间的工作日数。

代码语言:javascript
运行
复制
df['business_days'] = np.busday_count(date1,
                                     date2)
df['number_weekenddays'] = np.busday_count(date1,
                                      date2,
                                      weekmask='Sat Sun')

我试图将python中的上述查询复制到bigquery语法中。我该怎么做?我试过:

代码语言:javascript
运行
复制
select
  order_date,
  pickup_date,
  case 
    when date_diff(pickup_date, order_date, week) > 0 
      then date_diff(pickup_date, order_date, day) - (date_diff(pickup_date, order_date, week) * 2)
    else
      date_diff(pickup_date, order_date, day) 
  end
from `orders.table` 

但我得到了以下错误:

参数类型的函数DATE_DIFF没有匹配的签名:日期时间、日期时间、DATE_TIME_PART。支持的签名:DATE_DIFF(日期、日期、DATE_TIME_PART)在186:10处了解有关BigQuery SQL函数的更多信息。

即使所讨论的日期列是日期

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 14:46:04

最简单的方法可能是枚举这两个日期之间的天数,并筛选出非营业日。generate_date_array()很容易做到这一点:

代码语言:javascript
运行
复制
select o.order_date, o.pickup_date, 
    (
        select count(*)
        from unnest(generate_date_array(date(o.order_date), date(o.pickup_date))) dt
        where dateofweek(dt) between 2 and 6
    ) cnt_business_days
from `orders.table` o
票数 2
EN

Stack Overflow用户

发布于 2020-10-12 21:50:08

下面是用于BigQuery标准SQL的

代码语言:javascript
运行
复制
#standardSQL
select order_date, pickup_date,
  (select count(1) from all_days.day 
    where not extract(dayofweek from day) in (1, 7)
  ) as number_of_business_days
from `orders.table` t, 
unnest([struct(generate_date_array(order_date, pickup_date) as day)]) all_days  

如果要运行一些虚拟数据输出,如下所示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64319957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档