-1

我有一张像这样的桌子:

代码、日期、Open_Price、Close_Price

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

任何人都可以帮我处理 SQL 吗?

谢谢史蒂夫

4

1 回答 1

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 1orwhere 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
于 2013-02-25T22:46:21.070 回答