每个日期用相同的值替换 null - oracle sql

Replace null with same value per date - oracle sql

我正在尝试通过为同一 DATA 天内的所有 HOUR 小时设置相同的值来进行更新 VAL 的查询。它必须以某种方式检查同一日期的值并用它替换空值,但我似乎无法理解如何去做。在此先感谢您的帮助!

PROCESS    DATA     HOUR    VAL
-------- ---------- ----- -------
508410   2015.03.29  19   36.15
508410   2015.03.30  11   NULL
508410   2015.03.30  14   NULL
508410   2015.03.30  15   35.36
508410   2015.03.30  23   NULL
508410   2015.03.31  11   NULL
508410   2015.03.31  12   20.4
508410   2015.04.01  01   NULL
508410   2015.04.01  02   37.06

我希望它看起来像:

PROCESS    DATA     HOUR    VAL
-------- ---------- ----- -------
508410   2015.03.29  19   36.15
508410   2015.03.30  11   35.36
508410   2015.03.30  14   35.36
508410   2015.03.30  15   35.36
508410   2015.03.30  23   35.36
508410   2015.03.31  11   20.4
508410   2015.03.31  12   20.4
508410   2015.04.01  01   37.06
508410   2015.04.01  02   37.06

一种方法是在 set 子句中进行内联查询。您可以利用 max 忽略 null 的事实并将其用于 return 每个 data:

唯一的非空 val
UPDATE mytable a
SET    a.val = (SELECT MAX(val)
                FROM   mytable b
                WHERE  b.data = a.data)
WHERE  a.val IS NULL