BigQuery получает ошибку Correlated subqueries - чтобы получить предыдущее событие - PullRequest
0 голосов
/ 14 марта 2019

У меня есть 2 таблицы BigQuery:

1- Поездки

car     start                   end    
---------------------------------------------------
1       2019-03-13T17:07:00     2019-03-13T17:17:00
2       2019-03-13T17:07:00     2019-03-13T17:22:00
3       2019-03-13T17:07:00     2019-03-13T17:34:00
4       2019-03-13T17:07:00     2019-03-13T17:12:00

2- Отслеживание

car     created_at              status  
--------------------------------------
1       2019-03-13T17:01:00     1
1       2019-03-13T17:02:00     1
1       2019-03-13T17:03:00     1
1       2019-03-13T17:04:00     1
1       2019-03-13T17:05:00     2
1       2019-03-13T17:06:00     2
1       2019-03-13T17:18:00     3
1       2019-03-13T17:19:00     3
1       2019-03-13T17:20:00     3
1       2019-03-13T17:21:00     3
1       2019-03-13T17:22:00     3

Таблица отслеживания содержит состояние автомобиля до тех пор, покабыл в поездке.Моя цель - получить статус автомобиля в предыдущий момент поездки.

До сих пор я подходил:

select *,
(select status created_at from tracking
  where car = tracking.car
  AND start > created_at
  order by created_at desc
  limit 1
) as previous_status
from trips

Но я получаю следующую ошибку:

Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN.

Есть подсказка, как переписать запрос для BigQuery?

1 Ответ

0 голосов
/ 14 марта 2019

Чтобы получить предыдущее событие, используйте LAG() OVER() как в:

SELECT actor.login
  , type
  , LAG(type, 1) OVER(PARTITION BY actor.login ORDER BY created_at) prev_type
FROM `githubarchive.day.20190313` 
WHERE actor.login IN ('00aquir', '0123hoang')
LIMIT 100

enter image description here

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