SQL通过读取另一个表中的日期数组来合并表中的数据

时间:2017-02-02 12:31:18

标签: mysql sql

我需要创建一个查询来获取资产的当日价格及其基准。问题在于,资产比较的基准可能会随着时间而变化。幸运的是,有一个表存储基准更改的日期以及更改的基准,如下例所示:

+-------+-----------+------------+
 | Asset | Benchmark | Date       |
 | A1    | B1        | 2015-01-01 |
 | A1    | B2        | 2015-05-07 |
 | A1    | B3        | 2015-09-03 |
 | A1    | B4        | 2075-12-31 |
 | A1    | B1        | 2075-12-31 |
 | A2    | B4        | 2014-05-07 |
 | A2    | B2        | 2075-12-31 |
 +-------+-----------+------------+

日期字段显示基准测试正确的日期。

另外,我有一张表格,其中列出了每个基准的每个日期的价格,如下表所示:

+------------+-----------+-------+
| Date       | Benchmark | Price |
| 2014-05-07 | B1        | 1000  |
| 2014-05-07 | B2        | 1200  |
| 2014-05-07 | B3        | 1050  |
| 2014-05-07 | B4        | 900   |
| ...        | ...       | ...   |
| 2015-01-01 | B1        | 1500  |
| 2015-01-01 | B2        | 1550  |
| 2015-01-01 | B3        | 1450  |
| 2015-01-01 | B4        | 1600  |
| ...        | ...       | ...   |
+------------+-----------+-------+

我希望做的是按日期部分相应地加入基准,以创建“单一”基准。然后我会将此加入另一个包含每日资产价格的表格。例如,我需要通过从A1登记到2015-01-01的第一天获得基准B1的价格,然后从2015-01-02到2015-05的B2的价格,为资产A1创建基准。 07,然后价格从2015-05-08 B3到2015-09-03,最后从2015-09-04开始B4的价格。

另一个问题是数据集必须是连续的。我的意思是,当基准改变时,价格应该调整,使得先前基准的最后一天等于新基准中的同一天,然后保持相同的比例增长(通过我的意思是这次调整后Price(n)/ Price(n + 1)应该保持不变。)

预期输出仅为下表的日期和价格列。基准专栏仅用于澄清目的:

+------------+-------+-----------+
|    Date    | Price | Benchmark |
+------------+-------+-----------+
| 2014-05-07 | 1000  | B1        |
| 2014-05-08 | 1010  | B1        |
| ...        | ...   | ...       |
| 2015-01-01 | 1500  | B1        |
| 2015-01-02 | 1505  | B2        |
| 2015-01-03 | 1510  | B2        |
| ...        | ...   | ...       |
| 2015-05-06 | 1700  | B2        |
| 2015-05-07 | 1704  | B2        |
| 2015-05-08 | 1708  | B3        |
| 2015-05-09 | 1710  | B3        |
| ...        | ...   | ...       |
| 2015-09-02 | 2000  | B3        |
| 2015-09-03 | 1998  | B3        |
| 2015-09-04 | 2002  | B4        |
| ...        | ...   | ...       |
+------------+-------+-----------+

这一切都可以在SQL查询中完成吗?或者我应该通过代码转向这样做?

0 个答案:

没有答案