I have the table:
x
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
How fill in the gaps between rows using previous next row’s values in Oracle to get the following output:
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
the values of previous and next columns should be the same to fill the rows.
Advertisement
Answer
If you want all rows to be the same for a given year
and id
, just use max()
:
select t.*,
max(total) over (partition by year, id) as imputed_total
from t;
There seems to be no need for conditional logic. You could just do:
select t.id, t.year, t.quarter,
max(total) over (partition by year, id) as imputed_total
from t;