我想使用可变大小来限制在雪花中使用 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;
有什么方法可以使第一个查询工作,因为我需要从另一个表动态获取我想要的行数。
您不能在主查询的 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;