简体   繁体   English

有没有一种方法可以在 window function 中使用 SQL 中的 ROWS BETWEEN 'variable' PRECEDING AND CURRENT ROW?

[英]Is there a way to use a declared variable in BigQuery SQL with ROWS BETWEEN 'variable' PRECEDING AND CURRENT ROW in a window function?

Currently getting the error "Window framing expression must be a literal or parameter at [x:x]", it works fine using just the number 5 but this is used a lot throughout my script.当前收到错误“窗口框架表达式必须是 [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

You can use execute immediate to execute dynamic queries.您可以使用 execute immediate 来执行动态查询。 For eg.例如。 Below query uses var in over clause.下面的查询在 over 子句中使用了 var。

EXECUTE IMMEDIATE 立即执行

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' 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM