在Snowflake(SQL)中如何基于最小最大值区间生成对应多行数据
Snowflake SQL 生成区间整数行实现方案
方案1:使用原生GENERATE_SERIES函数(优先推荐)
Snowflake 内置的GENERATE_SERIES函数可以直接生成连续整数序列,配合横向连接(LATERAL JOIN)即可按ID展开对应区间的所有整数,写法简洁性能最优。
完整示例代码如下:
-- 此处WITH块为构造测试数据,实际使用时替换为你自己的业务表即可 WITH source_data AS ( SELECT 1 AS ID, 3 AS T_Min, 5 AS T_Max UNION ALL SELECT 2 AS ID, 1 AS T_Min, 4 AS T_Max ) SELECT s.ID, g.value AS T FROM source_data s, LATERAL GENERATE_SERIES(s.T_Min, s.T_Max) g ORDER BY s.ID, T;
方案2:递归CTE实现(兼容自定义规则场景)
如果需要自定义序列生成逻辑(比如非1间隔、特殊终止条件等),可以用递归CTE实现,代码如下:
WITH source_data AS ( SELECT 1 AS ID, 3 AS T_Min, 5 AS T_Max UNION ALL SELECT 2 AS ID, 1 AS T_Min, 4 AS T_Max ), recursive_series AS ( -- 递归初始节点:取每个ID的区间最小值作为起始值 SELECT ID, T_Min AS T, T_Max FROM source_data UNION ALL -- 递归迭代:每次+1直到达到区间最大值 SELECT ID, T + 1 AS T, T_Max FROM recursive_series WHERE T < T_Max ) SELECT ID, T FROM recursive_series ORDER BY ID, T;
两种方法输出的结果完全一致:
| ID | T |
|---|---|
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
内容的提问来源于stack exchange,提问作者user11453289
相关产品推荐
相关产品推荐

