Snowflake While 循环继续 sql 直到 @Counter 达到 365

Posted

技术标签:

【中文标题】Snowflake While 循环继续 sql 直到 @Counter 达到 365【英文标题】:Snowflake While loop to continue sql until @Counter reaches 365 【发布时间】:2021-09-21 05:26:28 【问题描述】:

我试图让我的代码在达到某个数字时停止计数,但我不断收到一个错误,即在声明之后我不能有 select 语句。

DECLARE @Counter INT 
SET @Counter=1
WHILE ( @Counter <= 365)
BEGIN
    
select Geography
, concat('Latest_Week_End ',current_date - @Counter) as WE_DATE
,concat(Department_ID,' ',Department_NM)
,Group_NM
,concat(category_ID,' ',category_nm)
,Sum(Dollar_sales)
,Sum(dollar_Sales_ya)
,Sum(unit_sales)
,sum(unit_sales_ya)
,sum(rom_dollars)
,sum(rom_dollars_ya)
,sum(rom_units)
,sum(rom_units_ya) from TEMP_TABLES.MR_OMNIDASH_IRI_SHARE
where geography like '%PORTLAND%'
and WE_Date in (current_date - @Counter)
group by 1,2,3,4,5
SET @Counter  = @Counter  + 7
END

【问题讨论】:

看起来您正在使用带有雪花的 T-SQL。这里的雪花文档docs.snowflake.com/en/sql-reference/session-variables.html 说你使用SET 而不是DECLARE 我将其更改为 Set 并取出“BEGIN”并将 放在查询周围,但我收到一条错误消息,提示存在意外的“WHILE”。知道我是否使用了错误的格式或其他什么?谢谢! 如果您正在寻找标准 SQL 中的 WHILE 循环,那么 Snowflake 目前不支持这种类型的脚本(即将推出)。在此之前,您需要将其包装到 javascript UDTF 或修改 SQL 以完全不使用循环。使用单个 SQL 语句而不是循环来创建逻辑似乎并不困难。 您应该加入现有的日历表,而不是使用WHILE 循环。这是一个完全标准的分析模式。但是你必须真正学习雪花语言,你不能只是使用不同的语言并期望它能够工作。这是雪花日历表的更多详细信息(我刚刚用谷歌搜索过)community.snowflake.com/s/question/0D50Z00008MprP2SAJ/… 【参考方案1】:

你能尝试不同的方法吗?

select  current_date() - seq4()*7 from table(generator(rowcount => 52))

返回去年最后 52 周的结束日期。

您的线路:

and WE_Date in (current_date - @Counter)

可以替换为

and WE_Date in (select  current_date() - seq4()*7 from table(generator(rowcount => 52)))

一切都应该很好?

【讨论】:

以上是关于Snowflake While 循环继续 sql 直到 @Counter 达到 365的主要内容,如果未能解决你的问题,请参考以下文章

Snowflake SQL:如何使用 JSON 对象循环遍历数组,以查找符合条件的项目

在嵌套的 while 循环中继续

从嵌套的 for 循环继续 while

mssql 存储过程中循环如何写,在循环中用啥语句跳出循环呢,在线等

如何创建一个while循环,继续循环,直到在C++中“使用流”输入一个键?

如何使用 tkinter 事件“继续”或暂停不同的 while 循环?