如何使用 unnest 生成日期数组来提供月末索引?

Posted

技术标签:

【中文标题】如何使用 unnest 生成日期数组来提供月末索引?【英文标题】:how can i use unnest generate date array to provide end of month index? 【发布时间】:2020-10-05 16:00:29 【问题描述】:

我希望能够为我的数据创建一个虚假索引,例如如果我有一个订单,我希望它在下面创建的数组中的每个日期重复。

select 
  *
 
  from 
  database.data,
    UNNEST(GENERATE_DATE_ARRAY(
        '2014-01-01',
        (SELECT
          MAX(Order_Date)
        FROM
          database.data), INTERVAL 1 MONTH)) AS month 

但是,这会创建每个月 1 日的索引,我该如何更改它以使其成为每个月的月底?例如2014-01-31,间隔1个月,起

【问题讨论】:

【参考方案1】:

您可以使用日期算术:

select d.*, date_sub(date_add(dt, 1, interval 1 month), interval 1 day)
from database.data d
cross join unnest(
    generate_date_array('2014-01-01', (select max(order_date) from database.data), interval 1 month)
) as dt 

【讨论】:

【参考方案2】:

自 2020 年 10 月 14 日起,发布了一个新函数 LAST_DAY,可以一站式完成此操作:

SELECT LAST_DAY(DATE '2008-11-25', MONTH) AS last_day

【讨论】:

以上是关于如何使用 unnest 生成日期数组来提供月末索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 snowsql 在给定日期范围内构造日期数组?

在GBQ中创建和循环日期数组

月末日期范围,其中最近一天 = 系统日期

创建具有附加属性和时刻的工作日数组

BigQuery:使用 UNNEST 检查数组的内容

python 获取当前月份月初日期和月末日期