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
.