Функция лестницы в BigQuery SQL

#google-bigquery

# #google-bigquery

Вопрос:

В приведенном ниже примере я хотел бы иметь функцию скользящей лестницы с номером 4 в качестве порога срабатывания для увеличения

 
SELECT 
  t, 
  -- f(t) as u
FROM UNNEST([1, 2, 4, 1, 2, 3, 5, 1, 2, 3, 3]) as t


-- expected result
 --- --- 
| t | u |
 --- --- 
| 1 | 1 |
| 2 | 1 |
| 4 | 2 | -- increment u since 4 >= 4 has been found
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 5 | 3 | -- increment u since 5 >= 4 has been found
| 1 | 3 |
| 2 | 3 |
| 3 | 3 |
| 3 | 3 |
 --- --- 
 

Как я могу реализовать f (t) для достижения этой цели, возможно, оконные функции?

Спасибо.

Ответ №1:

Вы можете использовать UNNEST СО СМЕЩЕНИЕМ и COUNTIF() ПОВЕРХ():

 SELECT 
  t, 
  1   COUNTIF(t >= 4) OVER (ORDER BY offset) as u
FROM UNNEST([1, 2, 4, 1, 2, 3, 5, 1, 2, 3, 3]) as t WITH OFFSET as offset
 

введите описание изображения здесь

Комментарии:

1. Еще раз большое спасибо! Как насчет того, если я имею дело только со столбцом, а не с МАССИВОМ? WITH A as ( SELECT t FROM UNNEST([1, 2, 4, 1, 2, 3, 5, 1, 2, 3, 3]) t ) SELECT ... FROM A

2. Нашел, ROW_NUMBER() OVER() as offset работает так же!