Я пытаюсь заполнить значения NULL в столбце самым последним значением, отличным от NULL, в этом столбце. Например, в приведенном ниже примере я хочу, чтобы столбец IG для значений FR и первого SPR был равен «1», но конечное значение SPR было равно «0».
Поскольку я пытаюсь отслеживать изменения в переменной IG с течением времени для заданного идентификатора задачи, мне это нужно, чтобы убедиться, что я не заполняю значения NULL для одного идентификатора проблемы результатами из другого идентификатора проблемы.
Мне удалось обновить значения NULL с помощью следующего кода. Проблема в том, что это не может определить последнее значение, отличное от NULL. Кажется, что он просто берет значение IG для любого значения, отличного от NULL, которое находится перед рассматриваемой строкой.
Например, для строки, содержащей SPR и «2002-12-02», переменная IG заполняется «1», а не желаемым «0».
Любая помощь будет ОЧЕНЬ оценена.
Пример кода:
UPDATE ratings_base a
SET ig = b.ig
FROM
(
SELECT issue_id,
rating,
date,
IG
FROM ratings_base
WHERE agency = 'MR'
) b
WHERE a.rating IS NOT NULL
AND a.agency != 'MR'
AND b.date < a.date
AND a.issue_id = b.issue_id;
Пример данных:
Issue_ID | Agency | Date | Rating | IG
---------------------------------------------
1 | MR | 2002-05-29 | 8 | 1
1 | MR | 2002-08-14 | 8 | 1
1 | FR | 2002-08-19 | 11 | NULL
1 | SPR | 2002-09-23 | 9 | NULL
1 | MR | 2002-10-02 | 9 | 1
1 | MR | 2002-11-26 | 11 | 0
1 | SPR | 2002-12-02 | 12 | NULL
2 | MR | 2002-08-14 | 8 | 1
2 | MR | 2002-08-17 | 8 | 1
WHERE a.rating IS NOT NULL
, ты уверен, чтоIS NULL
здесь не должно быть? - person Giorgi Nakeuri   schedule 03.03.2015