SQL Access 2010计算股票每日差距

时间:2013-02-25 22:34:21

标签: sql time-series

我有一张表:

定单, 日期, Open_Price, Close_Price

包含100个代码。我想添加另一个名为Gap的计算列,即Open_price - 昨天的收盘价。对于每一行(即每个股票代码,每天)

有人可以帮我解决SQL吗?

由于 史蒂夫

1 个答案:

答案 0 :(得分:1)

这是一种适用于SQL的许多方言的方法:

select t.*, open_price - lastclose as gap
from (select t.ticker, t.date, t.open_price, t.close_price,
             (select t.close_price from t t2 where t2.ticker = t.ticker and t2.date < t.date order by DATE desc limit 1
             ) as lastclose
      from t
     ) t

根据SQL的风格,limit 1也可以是select top 1where rownum = 1或。 。 。甚至其他一些可能性。

这使用相关子查询来模拟lag()函数,这是您真正需要的。如果你有这个,你可以写:

select t.*, open_price - lastclose as gap
from (select t.ticker, t.date, t.open_price, t.close_price,
             lag(close_price) over (partition by ticker order by date) as lastclose
      from t
     ) t