У меня есть две таблицы, обе с метками времени и некоторыми другими данными:
Таблица A
| name | timestamp | a_data |
| ---- | ------------------- | ------ |
| 1 | 2018-01-01 11:10:00 | a |
| 2 | 2018-01-01 12:20:00 | b |
| 3 | 2018-01-01 13:30:00 | c |
Таблица B
| name | timestamp | b_data |
| ---- | ------------------- | ------ |
| 1 | 2018-01-01 11:00:00 | w |
| 2 | 2018-01-01 12:00:00 | x |
| 3 | 2018-01-01 13:00:00 | y |
| 3 | 2018-01-01 13:10:00 | y |
| 3 | 2018-01-01 13:10:00 | z |
Что я хочуdo is
- Для каждой строки в Таблица A
LEFT JOIN
самая последняя запись в Таблица B , которая предшествует ей. - Когда есть более одной возможности, возьмите последнюю
Целевой результат
| name | timestamp | a_data | b_data |
| ---- | ------------------- | ------ | ------ |
| 1 | 2018-01-01 11:10:00 | a | w |
| 2 | 2018-01-01 12:20:00 | b | x |
| 3 | 2018-01-01 13:30:00 | c | z | <-- note z, not y
Я думаю, что это включает подзапрос, но я не могу получить этоработать в Big Query.Что у меня есть:
SELECT a.a_data, b.b_data
FROM `table_a` AS a
LEFT JOIN `table_b` AS b
ON a.name = b.name
WHERE a.timestamp = (
SELECT max(timestamp) from `table_b` as sub
WHERE sub.name = b.name
AND sub.timestamp < a.timestamp
)
На моем фактическом наборе данных, который является очень маленьким набором тестов (менее 2 МБ), запрос выполняется, но никогда не завершается.Любые указатели очень ценятся 10