Я хочу объединить три таблицы и заполнить пустые значения в полученной таблице. Три таблицы:
Таблица 1 (raw.fb_historical_data) - это основная таблица, к которой я хотел бы присоединиться к двум другим. Каждая строка этой таблицы связана с одной или несколькими строками в двух других таблицах посредством комбинации столбцов id, clk и timestamp (mkt_id и row_id в других таблицах).
+---------------------+-----+-----+--------------+
| timestamp | clk | id | some_columns |
+---------------------+-----+-----+--------------+
| 2016-06-19 06:11:13 | 123 | 126 | a |
| 2016-06-19 06:16:13 | 124 | 127 | b |
| 2016-06-19 06:21:13 | 234 | 126 | c |
| 2016-06-19 06:41:13 | 456 | 127 | d |
| ... | ... | ... | ... |
+---------------------+-----+-----+--------------+
Таблица 2 (raw.fb_runner_changes) - эта таблица по существу дает изменения цен для широкого спектра различных рынков
+---------------------+--------+--------+-------+
| timestamp | row_id | mkt_id | price |
+---------------------+--------+--------+-------+
| 2016-06-19 06:11:13 | 123 | 126 | 1 |
| 2016-06-19 06:21:13 | 123 | 126 | 2 |
| 2016-06-19 06:41:13 | 123 | 126 | 3 |
| 2016-06-06 18:54:06 | 124 | 127 | 1 |
| 2016-06-06 18:56:06 | 124 | 127 | 2 |
| 2016-06-06 18:57:06 | 124 | 127 | 3 |
| ... | ... | ... | ... |
+---------------------+--------+--------+-------+
Таблица 3 (raw.fb_runners) - таблица с дополнительная информация об изменениях рынка, к которой я хотел бы присоединиться
+---------------------+--------+--------+---------------+
| timestamp | row_id | mkt_id | other_columns |
+---------------------+--------+--------+---------------+
| 2016-06-19 06:15:13 | 234 | 126 | ab |
| 2016-06-19 06:31:13 | 234 | 126 | cd |
| 2016-06-19 06:56:13 | 234 | 126 | ef |
| 2016-06-06 18:54:06 | 456 | 127 | gh |
| 2016-06-06 18:56:06 | 456 | 127 | jk |
| 2016-06-06 18:57:06 | 456 | 127 | lm |
| ... | ... | ... | ... |
+---------------------+--------+--------+---------------+
По сути, я хочу заполнить NULL-информацию вперед (упорядоченной по метке времени) при группировке по идентификатору рынка.
Пока Я попытался объединить таблицы, используя
SELECT *
FROM raw.fb_historical_data AS h
LEFT JOIN raw.fb_runner_changes AS rc
ON rc.row_id = h.clk
AND rc.timestamp = h.timestamp
AND rc.mkt_id = h.id
LEFT JOIN raw.fb_runners AS r
ON r.row_id = h.clk
AND r.timestamp = h.timestamp
AND r.mkt_id = h.id
, который работал как предполагалось, хотя теперь в результирующем наборе данных есть нули, которые я хотел бы заполнить последним доступным значением для этого рынка .