Para extrair Random_1 para a data anterior, você usaria o
LAG()
função, assim:select ... , lag(t1.random_1) over (order by t1.date_key), .....
from table1 t1 join table2 t2 on t1.date_key = t2.date_key
...
(e o mesmo para as outras colunas). Observe que o resultado de
LAG()
será, é claro, NULL
para a primeira linha - já que não há valor "anterior". Se você quiser algo mais para a primeira linha, envolva tudo dentro de um COALESCE()
. Além disso, se você tiver
id
's de algum tipo e você entra por id
também, então você não quer misturar datas para ids diferentes. O LAG()
funções (e quase todas as outras funções analíticas) permitem que você partition by id
além de ordenar por data. Você pode ler a definição e os exemplos na documentação do Oracle
.