在雪花sql的限制子句中使用变量大小

问题描述 投票:0回答:1

我想使用可变大小来限制在雪花中使用 CTE 的行数:作为一个超级简单的示例,请考虑以下内容:

with num_groups as 
( select count(*) as num_group from table1 ) 

select
* from num_groups limit num_groups.num_group;

但是这样的事情会起作用:

with num_groups as 
( select count(*) as num_group from table1 ) 

select
* from num_groups limit 10;

有什么方法可以使第一个查询工作,因为我需要从另一个表动态获取我想要的行数。

sql snowflake-cloud-data-platform common-table-expression
1个回答
0
投票

您不能在主查询的 LIMIT 子句中直接使用 CTE 的结果。您可以实现此目的的其他方法是使用这样的存储过程;

CREATE OR REPLACE PROCEDURE dynamic_limit()
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$$
   var sql_command = "SELECT * FROM table1 LIMIT " + RESULT_SET_COUNT();
   var stmt = snowflake.createStatement({sqlText: sql_command});
   var result_set = stmt.execute();
   return result_set.toString();
$$;

CALL dynamic_limit();

或者,像 @Simeon 所说的脚本块;

DECLARE
   num_groups INTEGER;
BEGIN
   SELECT COUNT(*) INTO :num_groups FROM table1;
   SET @sql = 'SELECT * FROM table1 LIMIT ' || :num_groups;
   EXECUTE IMMEDIATE :sql;
END;
© www.soinside.com 2019 - 2024. All rights reserved.