【问题标题】:Generate YYYYMM for each month quarter and between two dates为每个月的季度和两个日期之间生成 YYYYMM
【发布时间】:2022-06-18 13:53:21
【问题描述】:

我想为两年之间的每个季度生成年月 (YYYYMM),并为每一行关联一个排名编号。

Date_Begin Date_End
2021 2023

我检索到 yearmonthrank 如下:

SELECT  GENERATE_ARRAY(1,((Date_End-Date_Begin )*4)) as period_rank
...
UNNEST(period_rank) AS period_yearmonthrank

返回:

period_rank
1
2
...
12

现在,我不知道如何为 yearmonth 部分生成此输出?

period_rank yearmonth
1 202103
2 202106
3 202109
4 202112
5 202203
6 202206
7 202209
8 202212
9 202303
10 202306
11 202309
12 202312

感谢您的宝贵时间!

【问题讨论】:

    标签: date google-bigquery


    【解决方案1】:

    试试这个:

    SELECT RANK() OVER (ORDER BY y, q) AS period_rank,
           FORMAT('%d%02d', y, q) AS yearmonth, 
      FROM UNNEST(GENERATE_ARRAY(2021, 2023)) y, UNNEST([3, 6, 9, 12]) q
    ;
    

    输出:

    【讨论】:

    • 太棒了!谢谢Jaytiger,你能详细告诉我这个'%d%02d'吗?你从 unnest 的 2 部分恢复数据,最后一个是两位数?
    • 是的,第一个 %d 将格式化年份数字,第二个 %02d 将格式化一个季度月,如果月份是单个数字,则添加 0。
    • 您可以像这样更改它们:FORMAT('%d%s', y, q)UNNEST(['03', '06', '09', '12']) 将产生相同的结果。
    • 感谢您的精确,问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多