【发布时间】:2015-03-03 18:35:01
【问题描述】:
我正在尝试用该列中最近的非 NULL 值填充列中的 NULL 值。例如,在下面的示例中,我希望 FR 和第一个 SPR 值的 IG 列为“1”,但最终 SPR 值为“0”。
当我试图跟踪给定 issue_ID 的 IG 变量随时间的变化时,我需要这样做以确保我不会用另一个 issue_ID 的结果填充一个 issue_ID 的 NULL 值。
我已经能够使用以下代码更新 NULL 值。问题是这无法识别 last 非 NULL 值。它似乎只是将 IG 值用于相关行之前的 any 非 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不应该在这里吗? -
嗨 Giorgi,很抱歉,但在我的完整数据集中,有些情况下“评级”变量为 NULL(在我的示例中未显示)。这不是我的代码中的错字。我可能还想为“IG”变量为空的位置添加一个条件。谢谢
-
对不起,我以为是 IG 而不是 null