我正在尝试创建一个查询,该查询将使用最近的已知值(在这种情况下为123)填充数据集中的所有空值。
datetime value
01/SEP/18 00:30 111
01/SEP/18 00:35 122
01/SEP/18 00:40 101
01/SEP/18 00:45 123
01/SEP/18 00:50 NULL
01/SEP/18 00:55 NULL
01/SEP/18 13:00 NULL
...
...
...
01/SEP/18 23:55 NULL
最终结果表应如下所示
datetime value
01/SEP/18 00:30 111
01/SEP/18 00:35 122
01/SEP/18 00:40 101
01/SEP/18 00:45 123
01/SEP/18 00:50 123
01/SEP/18 00:55 123
01/SEP/18 13:00 123
...
...
...
01/SEP/18 23:55 123
答案 0 :(得分:1)
您可以使用带有相关子查询的更新:
UPDATE yourTable t1
SET value = (SELECT value
FROM (SELECT value, ROWNUM AS rn
FROM yourTable t2
WHERE t2.datetime < t1.datetime AND t2.value IS NOT NULL
ORDER BY datetime DESC)
WHERE rn = 1)
WHERE value IS NULL;
此更新背后的想法是使用子查询查找最近的value
,而不是NULL
,它最接近给定的丢失value
。
如果您只想选择当前表来生成期望的输出,则可以尝试:
SELECT
datetime,
CASE WHEN value IS NULL
THEN (SELECT value
FROM (SELECT value, ROWNUM AS rn
FROM yourTable t2
WHERE t2.datetime < t1.datetime AND t2.value IS NOT NULL
ORDER BY datetime DESC)
WHERE rn = 1)
ELSE value END AS value
FROM yourTable t1;
答案 1 :(得分:0)
通过以下查询,我设法获得了所需的结果:
SELECT DATETIME, VALUE, last_value(VALUE) ignore nulls over (order by DATETIME)
FROM
TABLE1;