Sql 获取每个外键的最近一年和最不最近一年并计算

Sql 获取每个外键的最近一年和最不最近一年并计算,sql,sql-server,database,sql-server-2014,Sql,Sql Server,Database,Sql Server 2014,我使用以下公式计算两个时间范围(5年)之间的增长率: growth rate = ((2016 net income/2012 net income) * 1/(5 years)) - 1 我的损益表的结构如下: id | stockid | year | netincome 1 | 1 | 2016 | 235235346 2 | 1 | 2015 | 432434545 ..2014-2013 rows 5 | 1 | 2012 | 3243242

我使用以下公式计算两个时间范围(5年)之间的增长率:

growth rate = ((2016 net income/2012 net income) * 1/(5 years)) - 1
我的
损益表的结构如下:

id | stockid | year | netincome
1  | 1       | 2016 | 235235346
2  | 1       | 2015 | 432434545
..2014-2013 rows
5  | 1       | 2012 | 324324234
6  | 2       | 2016 | 234235234
7  | 2       | cycle continues..
如何选择每个股票id(
外键
)的最近年和最近年(2016年和2012年)来应用公式,然后在
股票
表的
增长率
列中更新结果

下面是我不完整的代码。由于我是SQL新手,请帮助我改进它或提供变通方法

UPDATE stock SET growthrate = (Help)  
FROM IncomeStatements WHERE IncomeStatements.stockid= stock.id

如果我理解正确,您需要获得当年的第一个和最后一个值以及净收入。您可以使用窗口函数来实现这一点

剩下的只是算术:

with i as (
      select distinct stockid,
             first_value(year) over (partition by stockid order by year) as year_first,
             first_value(year) over (partition by stockid order by year desc) as year_last,
             first_value(netincome) over (partition by stockid order by year) as netincome_first,
             first_value(netincome) over (partition by stockid order by year desc) as netincome_last
      from incomestatements i

update s
    set growthrate = ((i.netincome_last - i.netincome_first) / nullif(i.year_last - i.year_first, 0)) - 1
    from stock s
         i
         on s.stock_id = i.stock_id;

mysql还是sql server?sql server 2014:)