从多个开始和结束日期生成日期数组
Generating date array from several start and end dates
我正在尝试在 BQ 中生成一个日期数组,其中的日期位于 几个 开始日期和结束日期之间。
例如,对于开始日期和结束日期之间的几天,它看起来像这样:
SET DATES = GENERATE_DATE_ARRAY(DATE(2020,02,01), DATE(2022, 04, 25), INTERVAL 1 WEEK);
但是如果我想要包括所有这些日期,我将如何生成 DATES
:event_date BETWEEN "2020-02-01" AND "2020-04-25", event_date BETWEEN "2021-02-01" AND "2021-04-25", event_date BETWEEN "2022-02-01" AND "2022-04-25")
我没有遇到任何简单的修复方法。
您可以只创建所有这些单独的数组,然后 concat_array() 它们,不是吗?
考虑以下
with dates_ranges as (
select "2020-02-01" start_date, "2020-04-25" end_date union all
select "2021-02-01", "2021-04-25" union all
select "2022-02-01", "2022-04-25"
)
select date
from dates_ranges,
unnest(generate_date_array(date(start_date), date(end_date), interval 1 week)) date
我正在尝试在 BQ 中生成一个日期数组,其中的日期位于 几个 开始日期和结束日期之间。
例如,对于开始日期和结束日期之间的几天,它看起来像这样:
SET DATES = GENERATE_DATE_ARRAY(DATE(2020,02,01), DATE(2022, 04, 25), INTERVAL 1 WEEK);
但是如果我想要包括所有这些日期,我将如何生成 DATES
:event_date BETWEEN "2020-02-01" AND "2020-04-25", event_date BETWEEN "2021-02-01" AND "2021-04-25", event_date BETWEEN "2022-02-01" AND "2022-04-25")
我没有遇到任何简单的修复方法。
您可以只创建所有这些单独的数组,然后 concat_array() 它们,不是吗?
考虑以下
with dates_ranges as (
select "2020-02-01" start_date, "2020-04-25" end_date union all
select "2021-02-01", "2021-04-25" union all
select "2022-02-01", "2022-04-25"
)
select date
from dates_ranges,
unnest(generate_date_array(date(start_date), date(end_date), interval 1 week)) date