首页 > 解决方案 > 在雪花环境中给出开始和结束日期时如何创建时间序列?

问题描述

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

我从这里尝试了一段代码,但是 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$

标签: sqlsnowflake-cloud-data-platform

解决方案


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

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
;

推荐阅读