Oracle: Как заполнить пробелы между строками, используя значения предыдущей следующей строки, используя sql - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть таблица:

id  year    quarter total
==  ====    ======= =====
1   2010    1       100
1   2010    2       0
1   2010    3       100
1   2010    4       100
2   2010    1       20
2   2010    2       20
2   2010    3       20
2   2010    4       20

Как заполнить пробелы между строками, используя значения предыдущей следующей строки в Oracle, чтобы получить следующий вывод:

id  year    quarter total
==  ====    ======= =====
1   2010    1       100
1   2010    2       100
1   2010    3       100
1   2010    4       100
2   2010    1       20
2   2010    2       20
2   2010    3       20
2   2010    4       20

значения предыдущий и следующий столбцы должны быть одинаковыми для заполнения строк.

Ответы [ 4 ]

1 голос
/ 10 февраля 2020

Если вы хотите, чтобы все строки были одинаковыми для заданных year и id, просто используйте max():

select t.*,
       max(total) over (partition by year, id) as imputed_total
from t;

Кажется, что нет необходимости в условных логах c , Вы можете просто сделать:

select t.id, t.year, t.quarter,
       max(total) over (partition by year, id) as imputed_total
from t;
1 голос
/ 10 февраля 2020

Вы можете использовать lag():

select 
    id, 
    year, 
    quarter, 
    case 
        when 
            total = 0 
            and lag(total) over(partition by id order by year, quarter) 
                = lead(total) over(partition by id order by year, quarter) 
        then lag(total) over(partition by id order by year, quarter)
        else total
    end total
from mytable
0 голосов
/ 10 февраля 2020

Вы можете использовать диапазон с аналитической функцией. Также будет работать с avg ()

select 
    id, 
    year, 
    quarter, 
    case 
        when 
            total = 0 then
            max(total) over (partition by id order by year,quarter RANGE BETWEEN 1 preceding and 1 following) 
        else total
    end total
from mytable
0 голосов
/ 10 февраля 2020

ОБНОВЛЕНИЕ Имя таблицы SET total = 100 ГДЕ id = 1 И КВАРТАЛ = 2;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...