За да изтеглите Random_1 за предходната дата, ще използвате LAG() функция, така:
select ... , lag(t1.random_1) over (order by t1.date_key), .....
from table1 t1 join table2 t2 on t1.date_key = t2.date_key
...
(и същото за другите колони). Имайте предвид, че резултатът от LAG() ще бъде, разбира се, NULL за най-ранния ред - тъй като няма "предишна" стойност. Ако искате нещо друго за първия ред, обвийте всичко в COALESCE() .
Освен това, ако имате id е от някакъв вид и се присъединявате чрез id също така, тогава не искате да смесвате заедно дати за различни идентификатори. LAG() функции (и почти всички други аналитични функции) ви позволява да partition by id в допълнение към подреждането по дата. Можете да прочетете определението и примерите в документацията на Oracle
.