Присоединение строки к предыдущей строке с условием (Bigquery sql) - PullRequest
1 голос
/ 09 марта 2020

Я хочу присоединить таблицу, содержащую серию подэвентов, к идентификатору первого, чтобы я мог агрегировать по завершенному событию позже. Не удалось найти команду, которая делает это в bigquery sql.

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

Если кто-нибудь знает, как сделать один из двух вариантов, это было бы очень полезно. Спасибо!

Таблица выглядит так:

user id         time        part
111  1  01/03/2020 09:00    Start
111  2  01/03/2020 09:01    Middle
111  3  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  5  01/03/2020 19:10    Middle
111  6  01/03/2020 19:11    Middle
111  7  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  9  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  11 03/03/2020 20:45    end

и я хочу, чтобы она выглядела так:

user id         time        part
111  1  01/03/2020 09:00    Start
111  1  01/03/2020 09:01    Middle
111  1  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  4  01/03/2020 19:10    Middle
111  4  01/03/2020 19:11    Middle
111  4  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  8  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  10 03/03/2020 20:45    end

1 Ответ

1 голос
/ 10 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT user,
  MIN(id) OVER(PARTITION BY user, grp) AS id, 
  time, part
FROM (
  SELECT *, 
    COUNTIF(LOWER(part) = 'start') OVER(PARTITION BY user ORDER BY time) grp
  FROM `project.dataset.table`
)

, если применить к образцу данных из вашего вопроса - результат

Row user    id  time                part     
1   111     1   01/03/2020 09:00    Start    
2   111     1   01/03/2020 09:01    Middle   
3   111     1   01/03/2020 09:03    end  
4   111     4   01/03/2020 19:00    start    
5   111     4   01/03/2020 19:10    Middle   
6   111     4   01/03/2020 19:11    Middle   
7   111     4   01/03/2020 19:20    End  
8   222     8   02/03/2020 07:32    Start    
9   222     8   02/03/2020 07:35    End  
10  222     10  03/03/2020 20:40    Start    
11  222     10  03/03/2020 20:45    end  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...