sql - 如何增加雪花中的最大迭代次数?

标签 sql datetime common-table-expression snowflake-cloud-data-platform recursive-query

当我在 snowflake 中编写下面的代码时,出现了错误。

set start_date = '2020-08-01'::TIMESTAMP_NTZ(9);
set end_date = '2020-11-30'::TIMESTAMP_NTZ(9);

WITH DateTable AS (
    SELECT $start_date AS MyDate
    UNION ALL
    SELECT DATEADD(DAY, 1, MyDate) FROM DateTable WHERE MyDate < $end_date
)
SELECT * FROM DateTable; 

错误信息如下...

Recursion exceeded max iteration count (100)

我似乎没有办法自己增加最大迭代次数。
如何增加交互次数的限制?

最佳答案

使用 generator 的非递归版本:

SET (start_date,end_date)=('2020-08-01'::TIMESTAMP_NTZ(9),'2020-11-30'::TIMESTAMP_NTZ(9));
SET c = (SELECT DATEDIFF(DAY, $start_date, $end_date));

SELECT DATEADD(DAY, c.n, $start_date) AS calc_date
FROM(SELECT ROW_NUMBER() OVER (ORDER BY 1) - 1 FROM TABLE(generator(rowcount=>$c))) c(n);

解释:

变量 c 保存开始/结束日期之间的天数,并且是生成器的输入。生成器返回指定的行数。 ROW_NUMBER() OVER() - 1 窗口函数返回从 0 开始的连续数字,这些数字被添加到 start_date。

关于sql - 如何增加雪花中的最大迭代次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64845646/

相关文章:

SQL:如何根据两个字段查找重复项?

sql - 我需要哪些索引来加速 AND/OR SQL 查询

sql - 如何在内容类型中最好地集成现有数据库数据

mysql - 在 MySQL 中使用非标准日期时间格式

SQL CTE 和 ORDER BY 影响结果集

sql - 找到每个键的最新合格行

datetime - 在 mongodb 中获取 Date/ISODate 的组件

sql - 选择每日/每小时数据

sql - CTE 遍历备份层次结构?

SQL Server : CTE (recursion), 在 CTE 之外设置条件