自连接一个表并计算返回值

ylamdve6  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(391)

所以我在计算投资组合的回报时遇到了麻烦。例如,下表中有以下值:

create table StockReturn (
    Id int not null primary key auto_increment,
    Datedate null,
    Value decimal(10,2) null
);
insert into stockreturn values (1,'2000-1-1', 43534.12);
insert into stockreturn values (2,'2000-1-2', 41534.12);
insert into stockreturn values (5,'2000-1-2', 32341.12);
insert into stockreturn values (3,'2000-1-3', 46534.12);
insert into stockreturn values (4,'2000-1-4', 44234.12);

我想计算的是2000-1-2上的porfolio值相对于2000-1-1的返回百分比。请注意,我们还有多个日期相同的值。
我有下面的代码,但这给了我2000-1-3的错误值

select a.id, a.date, sum(a.value) as totalValueA, sum(b.value) as 
totalValueB
from stockreturn a
left join stockreturn b on a.datum = b.datum+1
group by date;

Result: 
1   2000-01-01  43534.12    Null
2   2000-01-02  73875.24    87068.24
3   2000-01-03  93068.24    73875.24
4   2000-01-04  44234.12    46534.12

我想看到的是第四列,名为“百分比回报”,它计算(value@2000-01-02-value@2000-01-01)/value@2000-01-01的值,并将其分配给日期2000-01-02。

oxalkeyp

oxalkeyp1#

使用 lead() :

select a.date, sum(a.value) as totalValue,
       lead(sum(a.value)) over (order by a.date) as next_totalValue
from stockreturn a
group by date;

相关问题