【发布时间】:2020-12-19 22:52:27
【问题描述】:
我有多家公司过去 10 年的股价数据。我希望能够查询此表以返回这些股票的年度(日历年)股票价格回报。请注意,每只股票可能不存在相同的日期,因此我尝试使用每只股票的最早和最晚可用日期动态计算回报。
我的桌子是这样的:
Date | Stock | Price
========== | ======== | =====
2018-01-03 | AAPL | 200
2018-04-20 | AAPL | 210
2018-07-10 | AAPL | 230
2018-10-05 | AAPL | 250
2018-12-20 | AAPL | 290
2019-01-06 | AAPL | 300
2019-06-15 | AAPL | 280
2019-09-10 | AAPL | 340
2019-12-28 | AAPL | 400
2018-01-02 | MSFT | 80
2018-04-20 | MSFT | 90
2018-07-10 | MSFT | 110
2018-10-05 | MSFT | 100
2018-12-22 | MSFT | 95
2019-01-10 | MSFT | 110
2019-04-20 | MSFT | 105
2019-06-19 | MSFT | 120
2019-09-11 | MSFT | 140
2019-12-30 | MSFT | 150
我正在寻找每只股票的最早和最新的股价,如下:
Date | Stock | Price
========== | ======== | =====
2018-01-03 | AAPL | 200
2018-12-20 | AAPL | 290
2019-01-06 | AAPL | 300
2019-12-28 | AAPL | 400
2018-01-02 | MSFT | 80
2018-12-22 | MSFT | 95
2019-01-10 | MSFT | 110
2019-12-30 | MSFT | 150
最后,我正在尝试计算回报(年终价格/年初价格 - 1)
Year | Stock | Return
===== | ======== | =====
2018 | AAPL | 0.45
2019 | AAPL | 0.3333
2018 | MSFT | 0.1875
2019 | MSFT | 0.3636
实现这一结果的最有效方法是什么(因为我将在 10 年内对 1000 多只股票进行此操作,这可能需要大量计算)?
【问题讨论】:
-
使用
row_number partition by (year, stock)获得第一个结果 -
请向我们展示您的尝试。
标签: sql sql-server stock