Есть ли способ использовать объявленную переменную в SQL BigQuery со СТРОКАМИ МЕЖДУ ПРЕДЫДУЩЕЙ И ТЕКУЩЕЙ СТРОКАМИ «переменной» в оконной функции?

# #sql #google-bigquery

Вопрос:

В настоящее время появляется ошибка «Выражение обрамления окна должно быть литералом или параметром в [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
 

Ответ №1:

Вы можете использовать команду выполнить немедленно для выполнения динамических запросов. Например. Ниже запрос использует var в предложении over.

ВЫПОЛНИТЬ НЕМЕДЛЕННО

 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'