【和SQL对比】连续区间的比上期
某支股票最长连续涨了多少交易日
SQL解法
select max(连续日数) from (select count(*) 连续日数 from (select sum(涨跌标志) over(order by 交易日) 不涨日数 from (select 交易日, case when 收盘价>LAG(收盘价) over(order by 交易日) then 0 else 1 end 涨跌标志 from 股价表) ) group by 不涨日数)
对于较复杂些的次序计算,常规的思维过程无法用SQL描述,必须改变思路转换问题才能完成。这里先计算从初始时刻开始累计的不涨日数,不涨日数相同的交易日即是在连续上涨,针对其分组可计算出最大连涨区间,这个原理读懂已经不易,写出来则更困难。
SPL解法
A | ||
1 | =demo.query(“select * from 股价表”).sort(交易日) | |
2 | =0 | 临时变量记录连续涨了几天 |
3 | =A1.max(A2=if(收盘价>收盘价[-1],A2+1,0)) | 比较前日决定A2是否继续加 |
SPL按自然的思路过程编写计算代码即可。