Tar*_*rik 6 sql generate-series snowflake-cloud-data-platform
我试图找到与 generate_series() (PostgreSQL 语法)等效的雪花。
SELECT generate_series(timestamp '2017-11-01', CURRENT_DATE, '1 day')
Run Code Online (Sandbox Code Playgroud)
小智 11
只是想扩展Marcin Zukowski的评论,说在JOIN.
我们最终还是这样做了!
select
dateadd(
day,
'-' || row_number() over (order by null),
dateadd(day, '+1', current_date())
) as date
from table (generator(rowcount => 90))
Run Code Online (Sandbox Code Playgroud)
小智 7
我遇到了类似的问题,并找到了一种方法,除了这里已经很好的答案之外,它还通过使用会话变量来避免生成器需要常量值的问题。这最接近我心目中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;
Run Code Online (Sandbox Code Playgroud)
WITH RECURSIVE rec_cte AS (
-- start date
SELECT '2017-11-01'::DATE as dt
UNION ALL
SELECT DATEADD('day',1,dt) as dt
FROM rec_cte
-- end date (inclusive)
WHERE dt < current_date()
)
SELECT * FROM rec_cte
Run Code Online (Sandbox Code Playgroud)
wat*_*bay -2
这就是我在 Snowflake 中生成一系列日期的方法。我将行数设置为 1095 以获取 3 年的日期,您当然可以将其更改为适合您的用例的任何值
select
dateadd(day, '-' || seq4(), current_date()) as dte
from
table
(generator(rowcount => 1095))
Run Code Online (Sandbox Code Playgroud)
编辑:这个解决方案不正确。seq4不保证序列没有间隙。请遵循其他答案,而不是这个答案。感谢@Marcin Zukowski 指出了这一点。
| 归档时间: |
|
| 查看次数: |
5760 次 |
| 最近记录: |