Обновление: Вот демонстрация проблемы: http://www.sqlfiddle.com/#!9/15ff5e/1
Я пытаюсь выполнить левое соединение для следующих 2 таблиц:
post_metrics
| post_id | likes |
|---------|-------|
| 'aaa' | 3 |
| 'aaa' | 7 |
| 'aaa' | 8 |
| 'bbb' | 2 |
| 'bbb' | 4 |
post_history
| post_id | post_text |
|---------|-----------|
| 'aaa' | 'doug' |
| 'bbb' | 'steve' |
Результаты аналогичны следующим:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | NULL |
| 'aaa' | 8 | NULL |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | NULL |
Я хотел бы заполнить эти значения NULL данными из предыдущих строк, чтобы результат был таким:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | 'doug' |
| 'aaa' | 8 | 'doug' |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | 'steve' |
Однакозапрос, который я использую ...
SELECT m.id,
m.likes,
@username := ifnull(p.username, @username) as username
FROM (select * from `post_metrics` WHERE post_id = @post_id) AS m
LEFT JOIN `post_history` AS p ON (m.post_id = p.post_id)
... дает мне следующие результаты:
| post_id | likes | post_text |
|---------|-------|-----------|
| 'aaa' | 3 | 'doug' |
| 'aaa' | 7 | 'steve' |
| 'aaa' | 8 | 'steve' |
| 'bbb' | 2 | 'steve' |
| 'bbb' | 4 | 'steve' |
Как правильно заполнить нулевые значения из предыдущих строк?
Это таблицы с миллионами строк и около 6 столбцов разреженных нулевых значений для заполнения.Поле 'post_text' не всегда одинаково для каждого post_id (иногда меняется), поэтому мне нужно распространить эти изменения на следующие строки, имеющие NULL.