我在mysql中有两个表。所有日期均为yyyy-mm-dd。如果有人了解共同基金,这个问题将很清楚。
+------------+--------------+-------+
| schemecode | navdate | nav |
+------------+--------------+-------+
| 1 | 2020-01-01 | 10 |
| 2 | 2020-01-01 | 10 |
| 3 | 2020-01-01 | 10 |
| 1 | 2020-01-02 | 11 |
| 2 | 2020-01-02 | 11 |
| 3 | 2020-01-02 | 11 |
| 1 | 2020-01-06 | 25 |
| 2 | 2020-01-06 | 25 |
| 3 | 2020-01-06 | 25 |
+------------+--------------+-------+
insert into navmaster(schemecode,navdate,nav) values
(1,'2020-01-01', 10),
(2,'2020-01-01', 10),
(3,'2020-01-01', 10),
(1,'2020-01-02', 11),
(2,'2020-01-02', 11),
(3,'2020-01-02', 11),
(1,'2020-01-06', 25),
(2,'2020-01-06', 25),
(3,'2020-01-06', 25)
+------------+------------+-----------------+-----+-------+
| trdate | schemecode | purchamount | nav | units |
+------------+------------+-----------------+-----+-------+
| 2020-01-01 | 2 | 1000 | 10 | 100 |
+------------+------------+-----------------+-----+-------+
| 2020-01-01 | 1 | 1000 | 10 | 100 |
+------------+------------+-----------------+-----+-------+
| 2020-01-02 | 1 | 1100 | 11 | 100 |
+------------+------------+-----------------+-----+-------+
| 2020-01-02 | 2 | 880 | 11 | 80 |
+------------+------------+-----------------+-----+-------+
| 2020-01-06 | 3 | 2000 | 25 | 80 |
+------------+------------+-----------------+-----+-------+
| 2020-01-06 | 1 | 1000 | 25 | 40 |
+------------+------------+-----------------+-----+-------+
insert into transactions(trdate,schemecode purchamount,nav, units)
('2020-01-01',2,1000,10,100),
('2020-01-01',1,1000,10,100),
('2020-01-02',1,1100,11,100),
('2020-01-02',2, 880,11,80),
('2020-01-06',3,2000,25,80),
('2020-01-06',1,1000,25,40)
我需要展示用户投资每天如何变化。价值以(累计单位余额)*(当天的净资产)计算。
示例:
+----------------------+-----------+
| date | invested | value |
+----------------------+-----------+--------+
| 2020-01-01 | 2000 | 2000 |
| 2020-01-02 | 3980 | 4180 |
| 2020-01-03(Holiday) | 3980 | 4180 |
| 2020-01-04(Holiday) | 3980 | 4180 |
| 2020-01-05(Holiday) | 3980 | 4180 |
| 2020-01-06 | 6980 | 12500 |
+----------------------+-----------+--------+
select a.navdate, sum(b.units) as cumulative_sales
from navmaster a join transactions b on a.navdate >= b.trdate and a.schemecode=b.schemecode
group by a.navdate order by a.navdate
任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
这就是我所拥有的。我认为它离您想要的东西越来越近,但它给出的答案与您所得到的不一样。您如何知道方案2的1/6资产净值?
select
trdate,
invested,
sum(holding) value
from
(
select
trdate,
(
select
sum(purchamount)
from
transactions
where
trdate <= t2.trdate
)
invested,
schemecode,
(
select
nav
from
transactions
where
trdate = t2.trdate
and schemecode = t2.schemecode
)
* (
select
sum(units)
from
transactions
where
trdate <= t2.trdate
and schemecode = t2.schemecode) holding
from
transactions t2
)
t1
group by
trdate
产生
trdate invested value
2020-01-01T00:00:00Z 2000 2000
2020-01-02T00:00:00Z 3980 4180
2020-01-06T00:00:00Z 6980 8000