För att dra Random_1 för föregående datum skulle du använda LAG()
funktion, som så:
select ... , lag(t1.random_1) over (order by t1.date_key), .....
from table1 t1 join table2 t2 on t1.date_key = t2.date_key
...
(och samma sak för de andra kolumnerna). Observera att resultatet av LAG()
kommer naturligtvis att vara NULL
för den tidigaste raden - eftersom det inte finns något "föregående" värde. Om du vill ha något annat för den första raden, linda allt inom en COALESCE()
.
Dessutom, om du har id
är av något slag och du går med med id
också, då vill du inte blanda ihop datum för olika id:n. LAG()
funktioner (och nästan alla andra analytiska funktioner) låter dig partition by id
förutom att beställa efter datum. Du kan läsa definitionen och exemplen i Oracle-dokumentationen
.