【和SQL对比】针对选出记录计算比上期
某支股票股价最高的那三个交易日及其收盘价和涨幅
SQL解法
select * from (select 交易日,收盘价, 收盘价/lag(收盘价) over(order by 交易日)-1 涨幅 from 股价表 ) where 交易日 IN (select 交易日 from (select 交易日, row_number() over(order by收盘价 desc) 排名 from 股价表) where 排名<=3)
窗口函数可以方便地计算比上期和排名,但必须将所有记录的比上期都计算出来后才能做过滤,而且需要书写子查询才能完成。
SPL解法
A | B | |
1 | =demo.query(“select * from 股价表”).sort(交易日) | |
2 | =A1.psort(收盘价:-1)([1,2,3]) | 股价最高的三天位置 |
3 | =A1.calc(A2, 收盘价/收盘价[-1]-1) | 计算这三天涨幅 |
4 | =A1(A2).new(交易日,收盘价,A3(#):涨幅) |
SPL很擅长这些与次序及位置相关的计算,代码简捷且符合思路过程。