累积投资组合摘要

时间:2020-06-14 00:10:58

标签: mysql

我在mysql中有两个表。所有日期均为yyyy-mm-dd。如果有人了解共同基金,这个问题将很清楚。

  1. NAVMaster-存储方案的NAV。除假日和周末外,NAV每天都会更改。
    +------------+--------------+-------+  
    | 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)
  1. 交易-存储用户完成的交易。用户购买具有购买量的方案时。将根据交易日的资产净值(Purchamount / nav = units)分配给他
+------------+------------+-----------------+-----+-------+  
| 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)  

我需要展示用户投资每天如何变化。价值以(累计单位余额)*(当天的净资产)计算。

示例:

  1. 2020年1月1日,用户在方案2中投资了1000,而在方案2中投资了1000 方案1.他每个方案有100个单位。投资额为 2000,值是2020-01-01的2000。
  2. 2020年1月2日,用户在方案1中投资了1100,在方案1中投资了880。 方案2。他在方案1中获得100个单位,在方案2中获得80个单位。的 投资金额是3980,值是4180(sch1单位-200 * 11)+ (sch2单位-180 * 11)
  3. 2020-01-03、2020-01-04、2020-01-05是假期。所以不会有资产净值 计算。前几天,即2020-01-02的值显示在 这些假期。
  4. 2020年1月6日,用户在方案3中投资了2000,而在方案3中投资了1000 方案1。他在方案3中获得80个单位,在方案1中获得40个单位。的 投资金额为6980,价值为12500(sch1单位为240 * 25 + sch2单位-180 * 25 + sch3单位-80 * 25)

+----------------------+-----------+  
|  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

任何帮助将不胜感激。

谢谢

1 个答案:

答案 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