У меня есть ежедневные временные ряды для компаний в моем наборе данных, и я использую PostgreSQL.
Для каждой компании все строки с NULL в столбце 3 должны быть удалены до первой записи NOT NULL в этом столбце для этой компании. Затем все последовательные отсутствующие значения заполняются значением последнего наблюдаемого значения для этой компании, которое НЕ NULL.
Вы можете представить себе следующий пример данных:
date company column3
1 2004-01-01 A 5
2 2004-01-01 B NULL
3 2004-01-01 C NULL
4 2004-01-02 A NULL
5 2004-01-02 B 7
6 2004-01-02 C NULL
7 2004-01-03 A 6
8 2004-01-03 B 7
9 2004-01-03 C 9
10 2004-01-04 A NULL
11 2004-01-04 B NULL
12 2004-01-04 C NULL
Было бы здорово, если бы мне удалось написать запрос, который доставляет
date company column3
1 2004-01-01 A 5
2 2004-01-02 A 5
3 2004-01-02 B 7
4 2004-01-03 A 6
5 2004-01-03 B 7
6 2004-01-03 C 9
7 2004-01-04 A 6
8 2004-01-04 B 7
9 2004-01-04 C 9
Я старался:
SELECT a.date, a.company, COALESCE(a.column3, (SELECT b.column3 FROM mytable b
WHERE b.company=a.company AND b.colmun3 IS NOT NULL ORDER BY b.company=a.company
DESC LIMIT 1)) FROM mytable a;
Есть две проблемы с кодом:
- Он не удаляет все записи со значениями NULL до первого значения NOT NULL, а
заполняет все пропущенные значения. - ...с первым наблюдением в столбце, а не с последним наблюдением перед
отсутствующим значением.