Корректировка таблицы на основе предыдущих значений в BigQuery - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица, которая выглядит следующим образом:

ID | Дата | X | Флаг |
1 | 01.01.16 | 2 | 0
2 | 01.01.16 | 0 | 0
3 | 01.01.16 | 0 | 0
1 | 2/1/16 | 0 | 0
2 | 1.02.16 | 1 | 0
3 | 1/1/16 | 2 | 0
1 | 3/1/16 | 2 | 0
2 | 3/1/16 | 1 | 0
3 | 3/1/16 | 2 | 0

Я пытаюсь сделать так, чтобы флаг заполнялся, если X = 2 в ПРЕДЫДУЩЕМ месяце. Таким образом, это должно выглядеть так:

ID | Дата | X | Флаг |
1 | 01.01.16 | 2 | 0
2 | 01.01.16 | 0 | 0
3 | 01.01.16 | 0 | 0
1 | 2/1/16 | 2 | 1
2 | 1.02.16 | 1 | 0
3 | 1/1/16 | 2 | 0
1 | 3/1/16 | 2 | 1
2 | 3/1/16 | 1 | 0
3 | 3/1/16 | 2 | 1

Я использую это в SQL:

  `select ID, date, X, flag into Work_Table from t

(
    Select  ID, date, X, flag,
            Lag(X) Over (Partition By ID Order By date Asc) As Prev into Flag_table
    From    Work_Table
) 

Update  [dbo].[Flag_table]
Set flag = 1
where prev = '2' 


UPDATE   t
Set t.flag = [dbo].[Flag_table].flag FROM T 
JOIN [dbo].[Flag_table]
 ON t.ID= [dbo].[Flag_table].ID where T.date = [dbo].[Flag_table].date`

Однако я не могу сделать это в Bigquery. Есть идеи?

1 Ответ

0 голосов
/ 24 апреля 2018

Ниже для BigQuery Standard SQL

#standardSQL
SELECT id, dt, x, 
  IF(LAG(x = 2) OVER(PARTITION BY id ORDER BY dt), 1, 0) flag
FROM `project.dataset.work_table`

Вы можете протестировать / поиграть с ним, используя фиктивные данные из вашего вопроса как

#standardSQL
WITH `project.dataset.work_table` AS (
  SELECT 1 id, '1/1/16' dt, 2 x, 0 flag UNION ALL
  SELECT 2, '1/1/16', 0, 0 UNION ALL
  SELECT 3, '1/1/16', 0, 0 UNION ALL
  SELECT 1, '2/1/16', 0, 0 UNION ALL
  SELECT 2, '2/1/16', 1, 0 UNION ALL
  SELECT 3, '2/1/16', 2, 0 UNION ALL
  SELECT 1, '3/1/16', 2, 0 UNION ALL
  SELECT 2, '3/1/16', 1, 0 UNION ALL
  SELECT 3, '3/1/16', 2, 0 
)
SELECT id, dt, x, 
  IF(LAG(x = 2) OVER(PARTITION BY id ORDER BY dt), 1, 0) flag
FROM `project.dataset.work_table`
ORDER BY dt, id

с результатом как

Row id  dt      x   flag     
1   1   1/1/16  2   0    
2   2   1/1/16  0   0    
3   3   1/1/16  0   0    
4   1   2/1/16  0   1    
5   2   2/1/16  1   0    
6   3   2/1/16  2   0    
7   1   3/1/16  2   0    
8   2   3/1/16  1   0    
9   3   3/1/16  2   1    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...