oracle-запрос повторяет последнее известное значение в наборе данных для всех нулевых значений - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать запрос, который будет заполнять все нулевые значения в наборе данных последним известным значением (в данном случае 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 голосов
/ 27 сентября 2018

Мне удалось получить желаемый результат с помощью следующего запроса:

  SELECT DATETIME, VALUE, last_value(VALUE) ignore nulls over (order by DATETIME) 
  FROM
  TABLE1;
0 голосов
/ 27 сентября 2018

Вы можете использовать обновление с коррелированным подзапросом:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...