首页 > 解决方案 > 有没有办法在窗口函数中使用 BigQuery SQL 中的声明变量和 ROWS BETWEEN 'variable' PRECEDING AND CURRENT ROW?

问题描述

当前收到错误“窗口框架表达式必须是 [x:x] 处的文字或参数”,仅使用数字 5 即可正常工作,但在我的脚本中经常使用它。

DECLARE variable INT64;
SET variable = 5;

SELECT col1, value, time, 
                CASE
                    WHEN "Bla" = "Bla"
                    THEN MIN(value) OVER (PARTITION BY col1 ORDER BY time ROWS BETWEEN variable PRECEDING AND CURRENT ROW) 
                    ELSE NULL
                    END 
                AS MinVal

FROM data

标签: sqlgoogle-bigquery

解决方案


您可以使用 execute immediate 来执行动态查询。例如。下面的查询在 over 子句中使用 var。

立即执行

declare var int64 default 5;

execute immediate

'select min(1) over(order by street_number ROWS BETWEEN '||var||' PRECEDING AND CURRENT ROW) from' ||'`bigquery-public-data.austin_311.311_service_requests` limit 100' 

推荐阅读