sql - 在WITH子句中创建日期列表 - GG Big Query

标签 sql google-bigquery

我想创建一个列表,列出从 2021 年 1 月 1 日开始的接下来 24 个月的每个月的第一天。

对于普通的 SQL,它可以与我在网上找到的以下代码一起使用:

with mnt as (
  select 1 as n, convert(date,'20210101',112) as d
  union all
  select n + 1, dateadd(month,1,d)
  from mnt
  where n < 24
)
select d from mnt

(您也可以在dbfiddle中看到它)

但是,当我在 BigQuery 上尝试相同的逻辑时,它不起作用,因为错误指出:表“mnt”必须使用数据集(例如 dataset.table)进行限定

with mnt as (
  select 1 as n, CAST('2021-07-01' AS DATE FORMAT 'YYYY-MM-DD') as d
  union all
  select n+1, date_add(CAST('2021-07-01' AS DATE FORMAT 'YYYY-MM-DD'), INTERVAL 1 MONTH)
  from mnt
  where n < 24
)

select d as salesmonth from mnt

See the code on BigQuery

我还尝试过在 Big Query 上循环

declare x DATE DEFAULT "2021-07-01";

REPEAT 
  Set x = date_add(x, INTERVAL 1 MONTH);
  SELECT x;
  until x > CAST('2023-07-01' AS DATE FORMAT 'YYYY-MM-DD')
END REPEAT;

但是结果没有以表格形式出现,我也不知道如何将它们放在WITH子句中。

有人知道如何解决此问题并在 Big Query 中调整上述 SQL 查询吗?

最佳答案

以下查询使用 WITH RECURSIVE将适用于您的情况。

with recursive mnt as (
  select 1 as n, DATE '2021-01-01' as d
  union all
  select n + 1, date_add(d, INTERVAL 1 MONTH)
  from mnt
  where n < 24
)
select d as salesmonth from mnt;

但在 BigQuery 中 GENERATE_DATE_ARRAY()比递归方法更方便。

SELECT * 
  FROM UNNEST(GENERATE_DATE_ARRAY('2021-01-01', '2022-12-01', INTERVAL 1 MONTH)) salesmonth

关于sql - 在WITH子句中创建日期列表 - GG Big Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74099285/

相关文章:

sql - 更新 SSAS 多维数据集中的度量

sql - SSRS - 在我的查询中忽略 SQL 变量

sql - 在 OrientDB 中的字符串嵌入集/列表中插入数据

php - 运行无效的 BigQuery 作业时如何进行故障排除/获取错误响应?

python - 如何在 python 中展平 google bigquery 结果

google-bigquery - 具有 ARRAY_CONCAT 和 Struct<String, String> 的不同键

sql - 何时使用 Oracle 提示?

sql - 适用于 Eclipse 的轻量级 SQL 编辑器

sql - BigQuery GroupBy 与 STRUCT

google-bigquery - BigQuery : Count elements in APPROX_QUNATILES