выберите значения вокруг нуля и добавьте значение в другой столбец BigQuery - PullRequest
0 голосов
/ 06 августа 2020

Я хочу проверить значения около нуля; если значения вокруг null совпадают, ничего делать не нужно. Если значения вокруг null не совпадают, я хотел бы скопировать пустые значения в другой столбец в той же позиции, что и в исходном столбце.

Пример:

Item    DesiredColumn

a        
null     null     
null     null
b        
null     
null     
b

   

1 Ответ

1 голос
/ 06 августа 2020

Ниже приведено для BigQuery Standard SQL

#standardSQL
SELECT *, 
  IF(
    LAST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) != 
    FIRST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
    AND Item IS NULL, NULL, ''
  ) AS DesiredColumn
FROM `project.dataset.table`   

Если применимо к образцу данных из вашего вопроса (как в примере ниже)

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 ts, 'a' Item UNION ALL
  SELECT 2, NULL UNION ALL
  SELECT 3, NULL UNION ALL
  SELECT 4, 'b' UNION ALL
  SELECT 5, NULL UNION ALL
  SELECT 6, NULL UNION ALL
  SELECT 7, 'b' 
)
SELECT *, 
  IF(
    LAST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) != 
    FIRST_VALUE(Item IGNORE NULLS) OVER(ORDER BY ts ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
    AND Item IS NULL, NULL, ''
  ) AS DesiredColumn
FROM `project.dataset.table`   

вывод будет

Row ts  Item    DesiredColumn    
1   1   a        
2   2   null    null     
3   3   null    null     
4   4   b        
5   5   null         
6   6   null         
7   7   b          

Примечание: у вас должен быть столбец в вашей таблице, который определяет порядок, в котором должно происходить сравнение. В моем примере выше такой столбец ts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...