#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
работает так же!