oracle查询为所有空值重复数据集中的最后一个已知值

时间:2018-09-27 03:04:56

标签: sql oracle

我正在尝试创建一个查询,该查询将使用最近的已知值(在这种情况下为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

2 个答案:

答案 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;