这似乎很简单,但我无法在线找到解决方案(不使用函数)。我正在使用bigquery,希望找到两天之间的工作日数。
df['business_days'] = np.busday_count(date1,
date2)
df['number_weekenddays'] = np.busday_count(date1,
date2,
weekmask='Sat Sun')
我试图将python中的上述查询复制到bigquery语法中。我该怎么做?我试过:
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函数的更多信息。
即使所讨论的日期列是日期
发布于 2020-10-12 14:46:04
最简单的方法可能是枚举这两个日期之间的天数,并筛选出非营业日。generate_date_array()
很容易做到这一点:
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
发布于 2020-10-12 21:50:08
下面是用于BigQuery标准SQL的
#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
如果要运行一些虚拟数据输出,如下所示
https://stackoverflow.com/questions/64319957
复制相似问题