我想创建一个列表,列出从 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
我还尝试过在 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/