我有一张表:
定单, 日期, Open_Price, Close_Price
包含100个代码。我想添加另一个名为Gap的计算列,即Open_price - 昨天的收盘价。对于每一行(即每个股票代码,每天)
有人可以帮我解决SQL吗?
由于 史蒂夫
答案 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 1
或where 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