相当于雪花的generate_series()

时间:2019-01-24 14:22:22

标签: sql generate-series snowflake

我试图找到与generate_series()(PostgreSQL语法)类似的雪花。

SELECT generate_series(timestamp '2017-11-01', CURRENT_DATE, '1 day')

4 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,并找到了一种方法,该方法除了在这里已经很不错的答案之外,还通过使用会话变量避免了生成器需要恒定值的问题。在我看来,这最接近OP的要求。

-- set parameter to be used as generator "constant" including the start day
set num_days =  (Select datediff(day, TO_DATE('2017-11-01','YYYY-MM-DD'), current_date()+1));
-- use parameter in bcrowell's answer now
select
  dateadd(
    day,
    '-' || row_number() over (order by null),
    dateadd(day, '+1', current_date())
  ) as date
from table (generator(rowcount => ($num_days)));
-- clean up previously set variable
unset num_days;

答案 1 :(得分:1)

这就是我能够在Snowflake中生成一系列日期的方式。我将行数设置为1095,以获得3年的日期,您当然可以将其更改为适合您的用例的

select 
    dateadd(day, '-' || seq4(), current_date()) as dte 
from 
    table 
       (generator(rowcount => 1095))

Originally found here

答案 2 :(得分:1)

只是想扩展Marcin Zukowski的评论,说在使用JOIN中以这种方式生成的日期范围之后,这些差距几乎立即开始显现。

我们最终还是这样做了!

select
  dateadd(
    day,
    '-' || row_number() over (order by null),
    dateadd(day, '+1', current_date())
  ) as date
from table (generator(rowcount => 90))

答案 3 :(得分:0)

添加此答案是为了完整,以防您有初始和最后日期:

select -1 + row_number() over(order by 0) i, start_date + i generated_date 
from (select '2020-01-01'::date start_date, '2020-01-15'::date end_date)
join table(generator(rowcount => 10000 )) x
qualify i < 1 + end_date - start_date