【发布时间】:2021-05-19 16:06:19
【问题描述】:
下表显示了user_portfolio 和STOCK_DATA_TRANSPOSED。
在第一个表中,用户 1 的投资组合包含 2019 年 12 月 30 日添加的 4 只股票。
在第二个表中,我们有每只股票未来 5 天的数据。
我想获取每天每只股票的差值,以便能够将其相加并创建一个图表,显示所有名称的用户投资组合的利润变化。
我怎样才能以最聪明的方式做到这一点?
select * from user_portfolio where User_ID = 1
ID Name Date Price User_ID
4 SO 2019-12-30 64.44 1
5 RWE.DE 2019-12-30 32.11 1
6 OPTT 2019-12-30 2.14 1
7 MMM 2019-12-30 205.11 1
Select Date, Name, Price from STOCK_DATA_TRANSPOSED
Date Name Price
2019-12-31 MMM 176.42
2020-01-02 MMM 180.00
2020-01-03 MMM 178.45
2020-01-06 MMM 178.62
2020-01-07 MMM 177.90
2019-12-31 SO 63.70
2020-01-02 SO 62.62
2020-01-03 SO 62.56
2020-01-06 SO 62.81
2020-01-07 SO 62.62
2020-01-02 RWE.DE 26.96
2020-01-03 RWE.DE 26.84
2020-01-06 RWE.DE 26.45
2020-01-07 RWE.DE 27.05
2020-01-08 RWE.DE 27.17
2019-12-31 OPTT 0.87
2020-01-02 OPTT 0.88
2020-01-03 OPTT 0.84
2020-01-06 OPTT 0.86
2020-01-07 OPTT 0.85
请参阅此 SQLFIDDLE 以获取测试数据:http://sqlfiddle.com/#!9/b81035 您可以忽略 STOCK_DATA_TRANSPOSED 中的时间戳和 id 列。
所需的输出可能看起来像这样 something(我知道上表中的价格与 Date_Price 不匹配):
Name Date Price User_ID Date_Diff Date_Price % Diff
SO 2019-12-30 64.44 1 2019-12-31 176.4199982 173.77%
RWE.DE 2019-12-30 32.11 1 2019-12-31 180 460.57%
OPTT 2019-12-30 2.14 1 2019-12-31 178.4499969 8238.78%
MMM 2019-12-30 205.11 1 2019-12-31 178.6199951 -12.92%
SO 2019-12-30 64.44 1 2020-01-02 177.8999939 176.07%
RWE.DE 2019-12-30 32.11 1 2020-01-02 62.61999893 95.02%
OPTT 2019-12-30 2.14 1 2020-01-02 62.56000137 2823.36%
MMM 2019-12-30 205.11 1 2020-01-02 62.81000137 -69.38%
SO 2019-12-30 64.44 1 2020-01-03 62.61999893 -2.82%
RWE.DE 2019-12-30 32.11 1 2020-01-03 33.11 3.11%
OPTT 2019-12-30 2.14 1 2020-01-03 0.8799999952 -58.88%
MMM 2019-12-30 205.11 1 2020-01-03 0.8399999738 -99.59%
表示投资组合中的每个条目,将与 Date 之后的每个 Date_Diff 进行比较。
% Diff 的计算公式为:(Date_Price - Price)/Price
【问题讨论】:
-
一个包含所有相关测试数据的 sqlfiddle 会更有用
-
版本:5.7.33-36-log
-
你能展示你想要的结果吗?这样会更容易回答。
-
如果 user_portfolio 中有多行对应相同的 user_id 和 stock?
-
您想要的结果中的股票价格与 STOCK_DATA_TRANSPOSED 中的不匹配,但我想我明白了。