sql - 在雪花环境中给出开始和结束日期时如何创建时间序列?
问题描述
给定一个包含开始日期和结束日期列的表,我试图以时间序列的形式获取单个行条目,其中所有日期都在提到的日期之间
我从这里尝试了一段代码,但是 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 是具有日期范围的表的名称,则以下内容有效:
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
;
推荐阅读
- angular - Angular:div标签上的属性绑定
- python - 在路径上设置 Python 版本 3
- node.js - 无法读取未定义的属性(读取“错误”)
- javascript - 获取 pipe() 状态 JavaScript
- python - 如何关闭一个特定的屏幕?
- python - 将 aws 胶水 get-tables 输出从 json 转换为 PySpark Dataframe
- directory - 仅复制文件夹
- reactjs - 如何将 .map 抽象到其他 React 组件以列出 API 调用
- java - 具有自定义域名的 Wiremock/Mockserver?
- javascript - Jquery x-editable 不起作用 - Laravel 6.x