针对选出记录计算比上期

某支股票股价最高的那三个交易日及其收盘价和涨幅

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很擅长这些与次序及位置相关的计算,代码简捷且符合思路过程。