如何在雪花环境中给出开始日期和结束日期时创建时间序列?

How to create a time series when start and end dates are given in a snowflake environment?

给定一个包含开始日期和结束日期列的 table,我试图以时间序列的形式获取单独的行条目,所有日期都在上述日期之间

我试过这里的一段代码但是 https://community.periscopedata.com/t/18wkh8/generate-series-of-dates-in-snowflake

select dateadd(day, '-' || seq4(), current_date()) as dte
from table (generator(rowcount => (Difference between start and end date))

Input:
Start_date End_date    Value
 2019-01-01 2019-01-15  1$
 2019-01-16 2019-01-23  2$
Output:
 Date        Value 
 2019-01-01   1$
 2019-01-02   1$ 
 ---- so on 
 2019-01-05   1$
 2019-01-16   2$ 
 --- so on 
 2019-01-23   2$

rowcount => 需要是一个常量,但您可以将其设置得足够大并稍后对其进行过滤,而不会花费明显的执行时间。例如,如果 DTS 是具有日期范围的 table 的名称,则以下内容有效:

with 
   maxdiff as (
      select max(datediff(day, start_date, end_date)) days
      from dts),
   cal as (
      select seq4() n 
      from table(generator(rowcount => 10000))
   )
select 
   dateadd(day, n, start_date) theDate, 
   value
from dts join cal
where n <= (select days+1 from maxdiff)
      and theDate >= start_date and theDate <= end_date
order by theDate
;

Stuart 的回答有问题:seq4() 不能保证给出序号——您可能会以一系列不同的日期结束。

相反,您可以这样做:

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